Skip to main content
The public API uses API key authentication. Every request must include your key in the X-API-Key header.

Request header

X-API-Key: tk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Getting an API key

Generate API keys from your Topify.ai dashboard under Settings > API Keys, or programmatically via the agentic setup endpoints. Each key is scoped to your team and gives access to all projects owned by that team.
The full API key is only shown once at creation time. Store it securely — Topify.ai only stores a SHA-256 hash of your key.

Rate limiting

Requests are rate-limited per API key. Limits depend on your plan tier:
TierRequests per minuteBurst allowanceTotal per window
Standard601070
Premium30050350

Response headers

Every response includes rate limit information:
HeaderTypeDescription
X-RateLimit-LimitintegerMaximum requests allowed in the current window
X-RateLimit-RemainingintegerRequests remaining before throttling
Retry-AfterintegerSeconds until the window resets (only present on 429)

Rate limit exceeded

When you exceed the limit, the API returns HTTP 429:
{
  "detail": "Rate limit exceeded. Retry after 42 seconds."
}

Key lifecycle

StateBehavior
ActiveKey is valid and accepts requests
InactiveKey has been disabled by an admin. Returns 401
ExpiredKey has passed its expiration date. Returns 401
You can deactivate or delete keys at any time from the dashboard.

Example requests

curl -X GET "https://topify-customer-api-production.up.railway.app/api/public/v1/projects" \
  -H "X-API-Key: tk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Error responses

StatusDetailCause
401Missing X-API-Key headerNo X-API-Key header provided
401Invalid API keyKey hash not found in the database
401API key is inactiveKey was disabled by an admin
401API key has expiredKey passed its expires_at date
429Rate limit exceeded. Retry after N seconds.Too many requests in the current window