Public API
Key authentication, five endpoints for campaigns and videos, pagination, response fields, errors and the request limit.
Updated Oct 17, 2026
The public API only reads your brand's data. The base address is https://api.tiklify.com/v1/api. Send your API key in the Authorization: Bearer tklfy_… or x-api-key: tklfy_… header. We accept 60 requests per minute and at most 20 per second per API key, across all endpoints; a key gets its own counter from the second request after a successful authentication, and until then the address counter applies. If more than 10 invalid API keys arrive from one address within a minute, that address gets a 429 with code API_KEY_RATE_LIMITED and a Retry-After header for 60 seconds; keys that authenticated successfully within roughly the last 10 minutes still get through.
curl "https://api.tiklify.com/v1/api/campaigns?status=live&limit=20" \
-H "Authorization: Bearer $TIKLIFY_API_KEY"
Endpoints
GET /me— your brand (brandwithid,name,currency) and the key'sscopes.GET /campaigns— the list of campaigns. Filtersstatusandq(searches the title).GET /campaigns/:id— one campaign, withdescriptionadded.GET /campaigns/:id/submissions— the campaign's videos. Filterstate.GET /submissions/:id— one video.
Pagination
Lists accept limit (default 50; above 100 counts as 100) and cursor, and return items and nextCursor. Pass nextCursor as cursor for the next page; on the last page it is null.
Response fields
A campaign has one entry in targets per platform:
{
"id": "31999db1-6be4-4cce-81cc-aee51f5e8efb",
"title": "Autumn collection",
"description": "Show how you wear our autumn collection.",
"category": "fashion",
"status": "live",
"visibility": "public",
"contentType": "ugc",
"payoutModel": "goal",
"launchMode": "open",
"currency": "CZK",
"budgetAmount": "30000.00",
"startsAt": "2026-10-01T08:00:00.000Z",
"endsAt": "2026-10-31T22:59:59.000Z",
"createdAt": "2026-09-28T12:00:00.000Z",
"targets": [
{
"id": "67c4fe02-65e3-4621-a742-994e863d04c7",
"platform": "tiktok",
"contentKind": "video",
"status": "live",
"rewardAmount": "1500.00",
"requiredViews": 10000,
"maxVideos": 20,
"pricePerUnit": null,
"viewUnit": null,
"requiredMention": null
}
],
"requiredHashtag": null,
"linkTracking": { "enabled": false, "destinationUrl": null }
}
A video:
{
"id": "cf2b7a29-fa3c-42e9-9414-9b3db1dd07b1",
"campaignId": "31999db1-6be4-4cce-81cc-aee51f5e8efb",
"targetId": "67c4fe02-65e3-4621-a742-994e863d04c7",
"platform": "tiktok",
"state": "monitoring",
"videoUrl": "https://www.tiktok.com/@creator/video/7426512345678901234",
"title": null,
"submittedAt": "2026-10-14T16:05:00.000Z",
"approvedAt": null,
"rejectedAt": null,
"views": null,
"rewardAmount": "1500.00",
"currency": "CZK",
"creator": { "nickname": "anna.creates" }
}
Possible values:
status (campaign and target) draft | scheduled | live | paused | stopped | ended | cancelled | archived
state (video) submitted | validated | monitoring | threshold_reached | fraud_review |
pending_approval | approved | rejected | paid_out | disputed | expired |
queued_for_slot
visibility public | exclusive | invite_only
contentType ugc | klip
payoutModel goal | perviews
launchMode open | masslaunch
platform tiktok | instagram | youtube
contentKind video (tiktok) | reel (instagram) | short (youtube)
currency EUR | CZK | PLN
amounts strings with two decimals ("1500.00"); pricePerUnit with four
times ISO 8601, UTC
views the current view count from the platform; null until the platform
reports it, and again once the stored platform data expires
rewardAmount (video) Goal: the video's fixed reward; Per-views: null until approval,
then the amount for the video's views
null does not mean zero. A creator appears only by nickname.
Errors
400 :id is not a UUID
400 invalid status, state or q (1–200 characters), cursor is not a UUID, or limit is not
a whole number from 1; the body has message "Validation failed" and an errors list
with field and message
400 cursor is not an item of this list: code INVALID_CURSOR
401 key missing or malformed: code API_KEY_REQUIRED
401 key invalid or revoked: code API_KEY_INVALID
403 key without the "Read" permission: code API_KEY_SCOPE
404 the campaign or video does not exist or belongs to another brand
429 you exceeded the request limit
Every error body contains statusCode and message.
Still stuck? Write to us at hello@tiklify.com.