Every route below needs one of these credentials, sent as a standard bearer header:
Authorization: Bearer <token>
| Credential | Looks like | Use for |
|---|---|---|
| Account token | JWT |
Managing your account — instances, API keys, billing |
| Personal access token | pat_... |
Same as above, for scripts/automation (no expiry) |
| Instance API key | sk_... |
Sending messages, webhook config, for one instance |
POST /auth/request-link with your email, then
GET /auth/verify?token=... from the link you receive returns
{ "token": "<jwt>" }. Expires after ~30 days.
POST /account/tokens using an existing account
token or personal access token. Shown once, at creation — save it then. Gates the
exact same routes as the account token, but never expires until you revoke it — use
this for a script that can't complete the login flow itself.
POST /instances succeeds, or after rotating it
via POST /instances/{instanceId}/api-key/rotate. Lost it? Open that
instance in the dashboard → Overview tab → Credentials
section (has a Copy button), or rotate a fresh one.
A route's lock icon below tells you which credential it needs — everywhere
AccountToken is listed, a personal access token works identically. Where
a route accepts both AccountToken and InstanceApiKey,
that's an OR — send whichever you have. The one exception:
/instances/{id}/messages/* routes always require the instance's own API
key, since that's meant for your server's own integration, not a dashboard session.
Example — listing your instances with a personal access token:
curl https://app.tarceel.com/instances \
-H "Authorization: Bearer pat_..."
Testing a route right on this page? Click Authorize below (the padlock icon), paste the raw token — no need to type "Bearer" yourself — and every "Try it out" call will send it automatically from then on.