Skip to content

API Overview

RegionBase URL
UShttps://api.traceclick.io
EUhttps://api-eu.traceclick.io

Use the base URL that matches the region your app was created in.

All API endpoints require an API key passed in the X-Api-Key header:

Terminal window
curl https://api.traceclick.io/v1/links \
-H "X-Api-Key: tr_live_xxxxxxxxxxxx"

API keys start with tr_live_ for production or tr_test_ for sandbox environments.

When using the CLI, your API key is stored in ~/.trace/config.json and sent automatically. Run trace whoami to verify your credentials.

EndpointMethodCLI equivalent
/v1/appsPOSTtrace init
/v1/apps/meGETtrace apps info
/v1/apps/mePATCHtrace apps update
/v1/apps/me/rotate-keyPOSTtrace apps rotate-key
/v1/apps/me/rotate-saltPOSTtrace apps rotate-salt
/v1/apps/me/billing/checkoutPOSTtrace apps upgrade
/v1/apps/me/billing/portalPOSTtrace apps billing
/v1/apps/me/dpaGETtrace apps dpa --status
/v1/apps/me/dpaPOSTtrace apps dpa --accept

App management endpoints use /me — your API key identifies which app you are.

EndpointMethodCLI equivalent
/v1/linksPOSTtrace links create
/v1/linksGETtrace links list
/v1/links/{code}GETtrace links get
/v1/links/{code}PATCHtrace links update
/v1/links/{code}DELETEtrace links delete
EndpointMethodCLI equivalent
/v1/privacy/erasePOSTtrace privacy erase
/v1/privacy/erase/{id}GETtrace privacy erase-status
/v1/privacy/exportPOSTtrace privacy export
EndpointMethodCLI equivalent
/v1/debug/attributionPOSTtrace debug attribution
/v1/debug/resetPOSTtrace debug reset
EndpointMethodCLI equivalent
/v1/webhooksPOSTtrace webhooks create
/v1/webhooksGETtrace webhooks list
/v1/webhooks/templatesGETtrace webhooks templates
/v1/webhooks/{id}GETtrace webhooks get
/v1/webhooks/{id}PATCHtrace webhooks update
/v1/webhooks/{id}DELETEtrace webhooks delete
/v1/webhooks/{id}/testPOSTtrace webhooks test
/v1/webhooks/deliveriesGETtrace webhooks deliveries
EndpointMethodDescription
/v1/clicks/recordPOSTRecord a click from your own landing page
EndpointLimitScoped by
POST /v1/apps10 req/minIP address
GET /v1/apps/me60 req/minAPI key
PATCH /v1/apps/me30 req/minAPI key
POST /v1/apps/me/rotate-key5 req/minAPI key
POST /v1/apps/me/rotate-salt5 req/minAPI key
POST /v1/apps/me/billing/*10 req/minAPI key
*/v1/apps/me/dpa10 req/minAPI key
POST /v1/links60 req/minAPI key
GET /v1/links120 req/minAPI key
PATCH /v1/links/{code}60 req/minAPI key
DELETE /v1/links/{code}60 req/minAPI key
POST /v1/clicks/record300 req/minAPI key
POST /v1/privacy/*30 req/minAPI key
POST /v1/webhooks30 req/minAPI key
GET /v1/webhooks120 req/minAPI key
PATCH /v1/webhooks/{id}30 req/minAPI key
DELETE /v1/webhooks/{id}30 req/minAPI key
POST /v1/webhooks/{id}/test10 req/minAPI key
GET /v1/webhooks/deliveries120 req/minAPI key
POST /v1/debug/attribution30 req/minIP address
POST /v1/debug/reset30 req/minAPI key

When you exceed a rate limit, the API returns 429 Too Many Requests. The CLI automatically retries with exponential backoff on rate limit and server error responses.

The API returns standard HTTP status codes with a JSON error body:

{
"error": "Short description of the problem"
}
StatusMeaning
400Bad request — invalid JSON, missing required field, or validation failure
401Unauthorized — missing or invalid API key, or region mismatch
403Forbidden — this endpoint requires the Trace CLI
404Not found — the requested resource doesn’t exist
429Rate limit exceeded — too many requests, retry later
500Server error — something went wrong on our end
503Service temporarily unavailable — try again in a moment

The CLI translates these into friendly messages and retries automatically on transient errors (429, 5xx).

All request and response bodies use JSON. Set the Content-Type header for POST/PATCH requests:

Terminal window
curl -X POST https://api.traceclick.io/v1/links \
-H "X-Api-Key: tr_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"deepLinkPath": "/welcome"}'