REST API · Creatives
List TikTok posts
TikTok Spark Ads: the existing posts a launch plan can run as ads (their likes and comments stay)
GEThttps://api.apogee.ad/api/v1/ad-accounts/{acc}/tiktok-posts
What it does
source account (default): the video posts of one of the brand's TikTok accounts (identity_id / identity_type from the launch questions' identity choices; default: the first one), a page at a time (next_cursor). source authorized: the posts creators authorized for this ad account with a code (bound in the Apogee app). Each post says whether it can run (usable, refusals) and gives its spark_post for POST /launch-plans ads[].spark_post.
Request
GET /ad-accounts/{acc}/tiktok-posts on https://api.apogee.ad/api/v1.
Path parameters
-
accstring path requiredTikTok advertiser id (GET /ad-accounts?platform=tiktok)
Query parameters
-
sourcestring query optional -
identity_idstring query optional -
identity_typestring query optional -
bc_idstring query optional -
cursorstring query optionalnext_cursor of the previous page
-
pagestring query optional
Headers
-
Authorizationstring header requiredBearer apk_…: an API key with the scope of this route.
Response
200.
-
sourcestring -
postsarray of objectsFields of each item (11)
-
item_idstring or null -
spark_postobjectWhat goes in a launch plan's ads[].spark_post
-
captionstring or null -
visibilitystring or null -
accountobjectFields (3)
-
idstring or null -
typestring or null -
namestring or null
-
-
duration_secnumber or null -
preview_urlstring or null -
authorizationobjectA creator's post: its authorization (status, end, days left)
-
usablebooleanfalse: TikTok would refuse it now (refusals)
-
refusalsarray of strings -
warningsarray of strings
-
-
availableboolean -
accountobjectFields (3)
-
idstring or null -
typestring or null -
namestring or null
-
-
next_cursorstring or nullsource account: the next page
-
pagenumber or null -
total_pagesnumber or null
Every answer carries X-Request-Id (give it to support), Apogee-Version: 2026-10-06, and the RateLimit and RateLimit-Policy headers.
Errors
Errors are application/problem+json with a stable code to switch on (all the codes).
| Status | Possible codes |
|---|---|
| 400 Bad request | idempotency_key_required, not_supported, request_refused, validation_failed |
| 401 Unauthorized | invalid_api_key |
| 403 Forbidden | account_not_connected, forbidden, insufficient_scope, meta_permission_denied, platform_permission_denied, upgrade_required |
| 404 Not found | not_found |
| 429 Too many requests | daily_read_cap, meta_rate_limited, platform_rate_limited, quota_exceeded, rate_limited |
| 500 Internal server error | internal_error |
| 502 Bad gateway | drive_error, launch_failed, meta_error, platform_error, upstream_error |
Example
With your key in APOGEE_API_KEY (create one):
curl 'https://api.apogee.ad/api/v1/ad-accounts/7000000000000000001/tiktok-posts' \
-H "Authorization: Bearer $APOGEE_API_KEY" {
"source": "account",
"available": false,
"account": {
"id": "120200000000000001",
"type": "120200000000000001",
"name": "Nordlicht | Spring launch"
},
"posts": [
{
"item_id": "120200000000000001",
"caption": "Example text",
"visibility": "120200000000000001",
"account": {
"id": "120200000000000001",
"type": "120200000000000001",
"name": "Nordlicht | Spring launch"
},
"duration_sec": 1,
"preview_url": "https://www.example.com/products/nordlicht-jacket",
"authorization": {},
"usable": false,
"refusals": [
"120200000000000001"
],
"warnings": [
"120200000000000001"
],
"spark_post": {}
}
],
"next_cursor": null,
"page": 1,
"total_pages": 1
} Access and cost
| Plans | Pro and Scale. |
|---|---|
| Scope | read (scopes). |
| Credits | Free up to the daily free reads (5,000 a day on Pro, 10,000 on Scale), then 1 credit per read. A request that fails costs nothing, a replayed one neither (credits). |
| Rate limit | Read: 600 per 15 minutes on Pro, 1,200 on Scale (rate limits). |
| Daily cap | Counts 1 unit toward the 2,000 units one API key can use in 24 hours. |
In the MCP
An AI assistant does the same with this tool of the MCP server:
list_tiktok_posts: TikTok Spark Ads: the existing posts a launch can run as ads, keeping their likes and comments.source: "account"(default): the video posts of one of the brand's TikTok accounts (the first one, oridentity_idfrom the launch interview), a page at a time;source: "authorized": the posts creators authorized for this ad account. Each post says whether it can run and gives itsspark_postforprepare_launch.
Related operations
- Create import:
POST /imports - Get import:
GET /imports/{id} - List drive folder:
GET /drive-folders - Create uploads:
POST /uploads - Confirm uploads:
POST /uploads/confirm - List TikTok music:
GET /ad-accounts/{acc}/tiktok-music - List platform templates:
GET /ad-accounts/{acc}/platform-templates