trackagoat logotrackagoat/Docs

Getting started

  • Welcome
  • Quickstart
  • Core concepts

Guides

  • Creators
  • Videos
  • Campaigns
  • Creator Goals
  • Tracking Inbox
  • Content calendar
  • How scraping works
  • Analytics & metrics
  • Similar creator pools
  • Over-posting & suppression
  • Program Health
  • Sentiment Radar
  • API keys
  • Limits & plan tiers
  • Notifications
  • Payouts

API reference

  • Overview
  • Authentication
  • Errors
  • Projects
  • Creators
  • Videos
  • Campaigns
  • Analytics
  • Aggregate Analytics
  • Payouts
  • Schema

For agents

  • Agent guide
  • Data model
  • MCP & tooling

Platform

  • Brand
  • Changelog
  • Support
DocsAPI reference

Errors

HTTP status codes, error response format, rate limits, and limit-reached responses.

PreviousAuthenticationNextProjects

On this page

  • Error response format
  • Status codes
  • 402 — Limit reached
  • 429 — Rate limited
  • Handling errors

Error response format

All errors use the same envelope shape:

json
{
  "data": null,
  "error": "Human-readable error message",
  "meta": { /* optional error detail */ }
}

Status codes

StatusMeaning
400Bad request — invalid query parameters or request body
401Unauthorized — missing, invalid, or revoked API key
402Limit reached — org has hit a count-based plan limit
403Forbidden — org or user is banned
404Not found — resource doesn't exist or isn't in your org
429Rate limited — daily API quota or per-key sliding-window exceeded
500Server error

402 — Limit reached

Returned when a write operation would exceed a count-based plan limit. The meta field contains details:

json
{
  "data": null,
  "error": "Limit reached: max_creators_per_org",
  "meta": {
    "code": "limit_reached",
    "limitKey": "max_creators_per_org",
    "current": 5,
    "max": 5
  }
}

See Limits & plan tiers for all limit keys.

429 — Rate limited

Two separate systems can produce 429s:

Daily quota — your org's max_api_requests_per_day was exhausted. Resets at UTC midnight.

json
{
  "data": null,
  "error": "Rate limit exceeded",
  "meta": {
    "code": "rate_limit_exceeded",
    "retryAfter": 3421
  }
}

retryAfter is seconds until the daily counter resets.

Per-key sliding window — too many requests in a short window from a single API key. Retry after a brief delay.

json
{
  "data": null,
  "error": "Too many requests",
  "meta": {
    "code": "too_many_requests"
  }
}

Handling errors

Always check meta

The meta field on error responses contains structured detail — use meta.code for programmatic error handling rather than parsing the error string.

javascript
const res = await fetch('https://www.trackagoat.com/api/v1/creators', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
 
const body = await res.json();
 
if (!res.ok) {
  if (res.status === 429) {
    const retryAfter = body.meta?.retryAfter ?? 60;
    // wait retryAfter seconds and retry
  } 




Authentication

API key setup and Bearer token usage.

Limits

Plan tiers, limit keys, and 402 responses.

else
{
throw new Error(body.error ?? `HTTP ${res.status}`);
}
}
const creators = body.data;