trackagoat logotrackagoat/Docs

Command Palette

Search for a command to run...

Getting started

  • Welcome
  • Quickstart
  • Core concepts

Guides

  • Creators & Accounts
  • Creators
  • Instagram tracking
  • YouTube tracking
  • 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
  • Shareable creator pages
  • Conversions

API reference

  • Overview
  • Authentication
  • Errors
  • Projects
  • Creators
  • Accounts
  • Share Links
  • Videos
  • Content Groups
  • Campaigns
  • Analytics
  • Aggregate Analytics
  • Goal Compliance
  • Payouts
  • Conversions
  • Schema

For agents

  • Agent guide
  • Data model
  • MCP & tooling

Platform

  • Brand
  • Changelog
  • Support
DocsAPI reference

API overview

Base URL, response envelope, pagination, date ranges, and API versioning.

PreviousConversionsNextAuthentication

On this page

  • The multi-platform model
  • Authentication
  • Response envelope
  • Pagination
  • Date ranges
  • API key scopes
  • Idempotency
  • API versioning
  • Available endpoints
  • Creators
  • Accounts
  • Videos
  • Content Groups
  • Campaigns, Projects, Goals
  • Organizations, Members, Invitations, API Keys
  • Payouts
  • Analytics

The trackagoat v2 API gives programmatic read and write access to your organization's data. All endpoints are under /api/v2/ and require API key authentication.

OpenAPI spec: GET /api/v2/openapi.json: importable into Postman, Insomnia, or any OpenAPI-compatible tool.

Base URL: https://www.trackagoat.com/api/v2

The apex domain trackagoat.com redirects to www.trackagoat.com. Always use www.trackagoat.com as your base URL to avoid redirect overhead.

The multi-platform model

Trackagoat 2.0 is multi-platform. A creator is a person or brand, and an account is one of their presences on a platform (tiktok, instagram, or youtube). A creator owns one or more accounts, and videos hang off accounts.

  • Creators embed their accounts[] array and expose a derived top-level handle (the primary account's handle: TikTok first, else earliest-created).
  • Tracking configuration (tracking_mode, start/end dates, the handle) lives on the account, not the creator.
  • Plan limits count accounts: the thing that gets scraped: not creators.

See the Creators & Accounts guide for the full concept.

Authentication

See Authentication for how to generate and use API keys.

Response envelope

Every endpoint returns JSON with this shape:

json
{
  "data": <payload or null>,
  "error": <error string or null>,
  "meta": <pagination info or null>
}

Successful responses have data set and error: null. Error responses have data: null and error set to a message string.

Pagination

List endpoints use cursor-based pagination:

bash
GET /api/v2/creators?limit=50&cursor=<value>
ParameterDefaultMaxDescription
limit50100Items per page
cursor::Pass meta.nextCursor from the previous response

The meta object on list responses:

json
{
  "hasMore": true,
  "nextCursor": "2026-03-15T10:00:00Z"
}

Keep fetching until meta.hasMore is false.

Date ranges

Analytics and stats endpoints accept ?from=YYYY-MM-DD&to=YYYY-MM-DD. Both default to the last 30 days if omitted.

bash
GET /api/v2/analytics?entity=creator&entity_id=<uuid>&metric=views&from=2026-01-01&to=2026-03-31

API key scopes

Keys carry explicit permission scopes set at creation time:

ScopeGrants access to
readAll GET endpoints
writeAll POST, PATCH, and DELETE endpoints
adminPlatform-admin-only endpoints (key owner must also be a platform admin)

Write endpoints reject keys that only have read scope with 403 insufficient_scope.

Idempotency

POST endpoints that create resources accept an Idempotency-Key header. Replaying the same key within 24 hours returns the cached response: safe for agent retries.

bash
curl -X POST \
  -H "Authorization: Bearer tga_<key>" \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -H "Content-Type: application/json" \
  -d '{"accounts": [{"platform": "tiktok", "handle": "charlidamelio"}]}' \
  "https://www.trackagoat.com/api/v2/projects/<id>/creators"

API versioning

The current version is v2. All endpoints live under /api/v2/.

v1 has been removed. Every /api/v1/* path now returns 410 Gone with a pointer to its successor:

json
{
  "data": null,
  "error": "API v1 has been removed. Use /api/v2. See /docs/api-reference/overview.",
  "meta": { "code": "api_version_removed", "successor": "/api/v2" }
}

The response also carries a Link: </api/v2>; rel="successor-version" header. If you are migrating from v1, the biggest change is the accounts model: a creator no longer has a tiktok_handle. It carries an accounts[] array, and you create creators with a list of accounts.

Available endpoints

For the full machine-readable spec, download /api/v2/openapi.json.

Creators

MethodPathScopeDescription
GET/api/v2/creatorsreadList creators (accounts embedded)
POST/api/v2/creatorswriteCreate a creator with one or more accounts
POST/api/v2/projects/{id}/creatorswriteAdd creator(s) to a project; bulk up to 50
GET/api/v2/creators/{id}

Accounts

MethodPathScopeDescription
GET/api/v2/accountsreadList accounts
GET/api/v2/creators/{id}/accountsreadList a creator's accounts
POST/api/v2/creators/{id}/accountswriteAdd an account to a creator
GET/api/v2/accounts/{id}read

Videos

MethodPathScopeDescription
GET/api/v2/videosreadList videos (filter by platform / account / content group)
POST/api/v2/projects/{id}/videoswriteAdd video(s) by URL; bulk up to 50
PATCH/api/v2/videos/{id}writeUpdate title, readme, tracking_status
DELETE/api/v2/videos/{id}

Content Groups

MethodPathScopeDescription
GET/api/v2/content-groupsreadList content groups
POST/api/v2/content-groupswriteCreate a content group
GET/api/v2/content-groups/{id}readGet a content group
PATCH/api/v2/content-groups/{id}write

Campaigns, Projects, Goals

MethodPathScopeDescription
GET/api/v2/campaignsreadList campaigns
POST/api/v2/projects/{id}/campaignswriteCreate campaign
PATCH/api/v2/campaigns/{id}writeUpdate campaign
DELETE/api/v2/campaigns/{id}write

Organizations, Members, Invitations, API Keys

MethodPathScopeDescription
POST/api/v2/user/organizationswriteCreate organization
POST/api/v2/organizations/{id}/memberswriteAdd member
PATCH/api/v2/organizations/{id}/members/{uid}writeChange member role
DELETE/api/v2/organizations/{id}/members/{uid}

Payouts

MethodPathScopeDescription
GET/POST/api/v2/payout-structuresread/writeList / create payout structures
GET/PATCH/DELETE/api/v2/payout-structures/{id}read/writeRead / update / delete structure
GET/POST/DELETE/api/v2/payout-structures/{id}/assignmentsread/writeManage creator assignments
GET/POST/api/v2/payout-methods

Analytics

MethodPathScopeDescription
GET/api/v2/analyticsreadUnified analytics (time-series + aggregates)
GET/api/v2/schemareadMachine-readable data model

Authentication

API key setup and Bearer token usage.

Errors

Status codes, rate limits, and error handling.

read
Get a creator
PATCH/api/v2/creators/{id}writeUpdate creator-level fields
DELETE/api/v2/creators/{id}writeSoft-delete creator
POST/api/v2/creators/{id}/scrapewriteTrigger manual scrape (all accounts, or one via ?account_id=)
Get an account
PATCH/api/v2/accounts/{id}writeRename handle / change tracking config
DELETE/api/v2/accounts/{id}writeSoft-delete account
POST/api/v2/accounts/{id}/scrapewriteTrigger a scrape for a single account
GET/api/v2/accounts/{id}/statsreadFollower/stat snapshot history
write
Hard-delete video
POST/api/v2/videos/{id}/scrapewriteTrigger manual scrape
POST/api/v2/videos/{id}/tracking-disablewriteDisable tracking
POST/api/v2/videos/{id}/tracking-enablewriteRe-enable tracking
POST/api/v2/videos/{id}/tracking-unexemptwriteRemove exemption flag
Rename / edit notes / add or remove members
DELETE/api/v2/content-groups/{id}writeDelete a content group
GET/api/v2/content-groups/{id}/statsreadCombined stats across the group
Delete campaign
POST/api/v2/campaigns/{id}/itemswriteAdd item to campaign
DELETE/api/v2/campaigns/{id}/itemswriteRemove item from campaign
GET/api/v2/projectsreadList projects
POST/api/v2/organizations/{id}/projectswriteCreate project
PATCH/api/v2/organizations/{id}/projects/{pid}writeUpdate project
PATCH/api/v2/projects/{id}/inboxwriteApprove/exclude inbox videos
POST/api/v2/creators/{id}/goalswriteCreate goal (platform-scoped)
PATCH/api/v2/creators/{id}/goals/{gid}writeUpdate goal
DELETE/api/v2/creators/{id}/goals/{gid}writeDelete goal
write
Remove member
POST/api/v2/organizations/{id}/invitationswriteSend invitation
DELETE/api/v2/organizations/{id}/invitations/{iid}writeRevoke invitation
POST/api/v2/organizations/{id}/api-keyswriteCreate API key
DELETE/api/v2/organizations/{id}/api-keys/{kid}writeRevoke API key
read/write
List / create payout methods
GET/PATCH/DELETE/api/v2/payout-methods/{id}read/writeRead / update / delete method
GET/POST/api/v2/payout-paymentsread/writeList / create payments
GET/PATCH/api/v2/payout-payments/{id}read/writeRead / update payment
GET/PATCH/api/v2/payout-accruals/{id}read/writeRead / update accrual
GET/POST/api/v2/projects/{projectId}/conversion-eventsread/writeList / create conversion event types
GET/PATCH/DELETE/api/v2/projects/{projectId}/conversion-events/{id}read/writeRead / update / deactivate an event type (?mode=hard needs admin)
GET/POST/api/v2/projects/{projectId}/conversionsread/writeList / record conversions (single or batch up to 500)
GET/DELETE/api/v2/projects/{projectId}/conversions/{id}read/writeRead / void a conversion (?mode=hard needs admin)
POST/api/v2/payouts/payment-receipts/upload-urlwriteGet signed receipt upload URL

Schema

Machine-readable data model for agents.