Built for developers, and their agents
A JSON API that does everything the console does, signed webhooks for every click, and an MCP server so your AI agent can make links too.
Pleasant to build on
The console’s own routes
Every screen in the console is an API call first. Same routes under /api, same checks, same permissions, in JSON.
Errors that name the field
Every 400 has the same shape, with the field at fault in details.fields. A misspelled key is refused, never quietly ignored.
Send only what changes
Updates are partial: leave a field out and it stays, send null and it clears.
Limits you can see
RateLimit headers on every answer. A 429 says which window ran out and when to retry.
Retries that count once
Report a conversion with your own id and it counts once, however many times it is sent.
A reference cut to your key
An OpenAPI document generated from the routes, showing only the calls your permissions allow.
What it can do
Links
Create, list, change, disable and delete: destination, back-half, domain, tags, go-live and expiry, click limit, password, UTM and the chat preview.
QR codes
Any link’s code as SVG or PNG, plain or in your colours and logo.
Analytics
Clicks by day, unique visitors, QR scans, countries, devices, browsers and referrers. CSV export included.
Tags
By person, team, campaign, channel, product or region, with the numbers read by tag.
Conversions
Report a sign-up or a sale against the click that led to it, with an amount and your order id.
Webhooks and GA4
A signed JSON POST for every human click, or the click sent to your Google Analytics 4 property. Retried for hours when your side is down.
An MCP server for your agents
Claude Code, Cursor or any agent that speaks the Model Context Protocol over HTTP makes and manages your links. 7 tools, each the console’s own action.
Nothing to install
One HTTP address and an API key in two headers. Claude Code takes it in one command; Cursor, Windsurf and other clients in a few lines of settings.
Exactly what its key allows
Every tool runs the console’s own action under that key’s permissions. A key that can only view links gives an agent that can only view links.
The same rules as a person
Safety checks, plan allowances, domain and back-half rules all apply. A refusal comes back in words the agent can act on.
Ask in plain words
“Shorten this for the autumn campaign on go.northwind.com.” “Which links point at the old pricing page?” “Turn off the summer sale link.”
The tools
List domains
The domains the organisation may make links on, its own and the shared ones, with how many links the plan has left this period. Needs Links · View.
Check a back-half
Whether a back-half is free on a domain, by the same rules a create applies. Needs Links · Create.
Create a link
Make a short link from a destination, on your own domain or a shared one, with a chosen or generated back-half, tags, an expiry and the rest of the link form. Needs Links · Create.
Read a link
One link’s settings and state, with its last 30 days of clicks, visitors and QR scans. Needs Links · View.
List links
The organisation’s links, newest first, searched and filtered. Needs Links · View.
Change a link
Change a link’s destination or settings; what is left out keeps its value. Needs Links · Edit.
Disable or enable a link
Turn a link off, keeping its history, or back on. Needs Links · Edit.
Not yet: sign-in by OAuth (the server takes an API key), and deleting, routing, QR codes and longer analytics, which stay in the console and the API.
Keys, signatures and signed webhooks
An API key per job
For the organisation or one person, with only the permissions it needs and never more than its maker holds. It expires when you choose; rolling or revoking it is one click.
Two headers, or a signature
Send the key’s ID and secret in two headers, or sign the request with HMAC-SHA256 so the secret never travels. A browser session never counts.
Webhooks you can check
Every delivery is signed with its own secret and a timestamp, so your server can refuse anything forged or replayed.
The reference lives in the console
Every call with its fields and answers, the webhook body and how to check it, the MCP setup and the errors: in the console once you are signed in.