# t.link > t.link is a URL shortener built for agents and creators. Short links open YouTube, Instagram, TikTok, Spotify, Amazon, X and other apps in the native app on phones instead of an in-app browser. It has an MCP server, a REST API, click analytics, QR codes and custom domains. t.link is part of Tapstack, alongside Tapni (digital business cards) and MailSign (email signatures), and uses the same Tapstack account. Use the MCP server when you can; it has typed tools and readable errors. Use the REST API from scripts. Both act in one Tapstack workspace and never reach Tapni or MailSign data. ## Connect - MCP server (Streamable HTTP): https://api.t.link/mcp/tlink - REST API base URL: https://api.t.link/v1/tlink - Auth for both: `Authorization: Bearer tlk_...` with an API key created at https://app.t.link/developers - Connectors that sign in (Claude, ChatGPT): add the MCP server URL and sign in with the Tapstack account; no key needed. OAuth scope: `tlink`. - Rate limit: 120 requests per minute per key. A 429 means wait and retry. Claude Code: claude mcp add --transport http tlink https://api.t.link/mcp/tlink --header "Authorization: Bearer tlk_your_api_key" ## MCP tools - `create_link` { url, slug?, title?, tags?, domain_id?, deep_link?, expires_at? }: shorten a URL. Returns `link.short_url`. Omit `slug` for a generated 7-character code. - `list_links` { search?, tag?, sort?, limit?, offset? }: find links. `search` matches the code, destination and title. - `get_link` { id } - `update_link` { id, url?, slug?, title?, tags?, deep_link?, is_active?, expires_at? }: only the fields passed change. `is_active: false` pauses a link. - `delete_link` { id }: the short URL stops working. Ask the person first. - `get_link_stats` { id, days? }: clicks, unique visitors, per day, by country, referrer, device, browser, OS, link tap vs QR scan, and which native apps were opened. - `get_analytics` { days? }: the same across the workspace, plus top links. - `list_domains`: custom domains that links can be put on. t.link is always available. - `preview_deep_link` { url }: which native app a destination would open on phones. - `whoami`: the workspace this connection acts in and its monthly usage. ## REST API All responses are JSON with `success: true` or `{ success: false, error: "", message: "" }`. - `POST /links` { url, slug?, title?, tags?, domain_id?, deep_link?, expires_at? } -> 201 { link } - `GET /links?search=&tag=&sort=recent|clicks&limit=&offset=` -> { links, total, limit, offset } - `GET /links/{id}` -> { link } - `PATCH /links/{id}` { url?, slug?, title?, tags?, deep_link?, is_active?, expires_at? } -> { link } - `DELETE /links/{id}` - `GET /links/{id}/stats?days=30` - `GET /analytics?days=30` - `GET /domains` - `GET /me`: workspace, plan limits and usage - `GET /deep-link?url=`: no auth; which app a URL opens - `POST /public/links` { url }: no auth; a link that expires after 24 hours unless claimed by signing in. Returns `claim_token` once. A link object: `id`, `short_url`, `domain`, `hash`, `url`, `title`, `tags`, `deep_link`, `deep_link_app`, `expires_at`, `expired`, `is_active`, `clicks`, `last_clicked_at`, `source` (app | api | mcp | public), `created_at`, `updated_at`. Machine-readable reference: https://t.link/openapi.json ## Rules worth knowing - Never invent a short URL. Only report a `short_url` the API or a tool returned. - A custom `slug` uses letters, numbers, hyphens and underscores, up to 64 characters, at least 3 on t.link. Codes are case-insensitive. `hash_taken` (409) means pick another; `hash_reserved` means the word is reserved. - Destinations must be public http(s) URLs. IP addresses, localhost, credentials in the URL and links back to t.link are refused (`url_*` codes). - Free beta: 1,000 new links per month per workspace (`links_limit`, 429), 3 custom domains, 10 API keys. - Deep links are automatic. `deep_link_app` on the link says which app it will open. Desktop visitors and link-preview bots always get a plain redirect. - The visitor's query string is passed on to the destination, so `t.link/abc?utm_source=x` works. Add `?qr=1` to count a visit as a QR scan. - Analytics hold no IP addresses. Unique visitors are counted per day. ## Deep link support YouTube, Instagram, TikTok, Spotify, Amazon, X, Facebook, Threads, LinkedIn, Twitch, WhatsApp, Telegram, Snapchat, Discord. On Android the link opens the app with the web page as fallback. On iOS it opens the app where the app accepts that content; otherwise it opens the web page. ## More - Website: https://t.link - App: https://app.t.link - Tapstack (account, workspace, members): https://tapstack.com