Available on paid plans

Your brands, from your own tools

Two documented JSON endpoints and a key you issue yourself. Read your brands and your links from a script, a spreadsheet, a dashboard of your own — or hand the two URLs to an assistant and let it call them.

API keys

Issue a key from Account → Developers, send it as a bearer token, revoke it when you are done. Scoped to one workspace, never to your login.

Stored as a hash and shown once. A key you can read back off a screen is a key that leaks with the screenshot.

GET /api/v1/brands

Every brand in your workspace as JSON: name, public address, whether it is published, and its page views.

Paged with ?limit= and ?offset=. 100 rows by default, 500 at most.

GET /api/v1/links

Every link, with its destination, clicks, health and the code the last check returned. Narrow to one brand with ?brand=<id>.

The same numbers the dashboard shows, from the same rows — there is no second definition to disagree with.

Limits worth knowing

120 requests a minute per key, then a 429 with retry-after. Read-only, so nothing you call can change anything.

A key belonging to a plan without API access is refused with 402 on every call, not silently emptied.

What this is not, yet

An earlier version of this page promised a command-line client and an MCP server. Both are off the plan rather than late, and the reason is the same in each case: an assistant can already call two documented JSON endpoints with a bearer token, and a terminal can already curl them. A package to install and an OAuth flow to maintain would add a thing to keep working, not a thing you can do.

  • No writes. Every endpoint is a GET. A key that can write is a key that can delete your links from a script, and that deserves scopes and an audit trail before it deserves a launch.
  • No webhooks. They mean a queue, retries with backoff, signing and a delivery log — four things to run so that one thing can be pushed instead of polled.

If one of these is what you actually need, say so — the list below is short because nobody has asked yet, not because the answer is no.

Tell us what you would build

The next thing this gets will be whatever people actually ask for. If you need a field that is not returned, an endpoint that does not exist, or writes, say so — it goes on the list with your name against it.