API Reference
Explore every publishing API endpoint, field, and response.
Use this reference to inspect request fields, response shapes, and ready-to-run examples for every v2 endpoint.
https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApiAuthorization: Bearer $API_KEYUploads#
/v2/uploads
Create an upload
Videos must be MP4 with H.264 video and AAC audio when present, no larger than 120 MB or 3 minutes, up to 1080 × 1920 and 60 fps.
Request body
kindenum: video | imagerequiredfilenamestringrequiredmin length 1 · max length 255contentTypestringrequiredmin length 1 · max length 100sizeBytesintegerrequiredmin > 0kindenum: video | imagerequiredsourceUrlstringrequiredformat: urifilenamestringmin length 1 · max length 255Request
curl -X POST \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/uploads" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"kind": "video",
"filename": "video.mp4",
"contentType": "video/mp4",
"sizeBytes": 0
}'201 response
{
"uploadId": "abc123",
"uploadUrl": "https://example.com/media",
"expiresAt": "2026-07-15T12:00:00Z"
}Responses
201Success400Error401Error403Error413Error415Error422Error429Error/v2/uploads/{uploadId}/complete
Complete a signed upload
Validates uploaded video container, codecs, size, duration, dimensions, and frame rate before marking it ready.
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| uploadId | path | required | string |
Request
curl -X POST \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/uploads/UPLOAD_ID/complete" \
-H "Authorization: Bearer $API_KEY"200 response
{
"uploadId": "abc123",
"status": "ready"
}Responses
200Success409Error413Error415Error422Error/v2/uploads/{uploadId}
Get upload status
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| uploadId | path | required | string |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/uploads/UPLOAD_ID" \
-H "Authorization: Bearer $API_KEY"200 response
{
"uploadId": "abc123",
"kind": "video",
"status": "pending",
"url": "https://example.com/media",
"thumbnailUrl": "https://example.com/media",
"error": "string"
}Responses
200Success404ErrorPosts#
/v2/posts
Create and queue a post
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| Idempotency-Key | header | optional | string |
Request body
mediaarray<string>requiredmin items 1 · max items 10accountIdsarray<string>requiredmin items 1 · max items 50captionstringmax length 2200hashtagsarray<string>max items 30soundobject
modeenum: trending | original | specificrequiredurlstringformat: uriurlsByPlatformobject
tiktokstringformat: uriinstagramstringformat: urinotesstringmax length 2000priorityintegermin 0scheduledAfterstringformat: date-timeRequest
curl -X POST \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/posts" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"media": [
"string"
],
"accountIds": [
"abc123"
]
}'201 response
{
"postId": "abc123",
"status": "draft",
"media": {
"kind": "video",
"count": 0,
"thumbnailUrl": "https://example.com/media"
},
"caption": "A new post from HumanPost",
"hashtags": [
"string"
],
"sound": {
"mode": "trending",
"url": "https://example.com/media",
"urlsByPlatform": {
"tiktok": "https://example.com/media",
"instagram": "https://example.com/media"
}
},
"notes": "string",
"createdAt": "2026-07-15T12:00:00Z",
"accounts": [
{
"accountId": "abc123",
"username": "humanpost",
"platform": "tiktok",
"status": "draft",
"queuedAt": "2026-07-15T12:00:00Z",
"approvedAt": "2026-07-15T12:00:00Z",
"scheduledSlotStart": "2026-07-15T12:00:00Z",
"postedAt": "2026-07-15T12:00:00Z",
"postUrl": "https://example.com/media"
}
]
}Responses
200Idempotent replay201Post created400Error409Error429Error/v2/posts
List posts
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| limit | query | optional | integer |
| cursor | query | optional | string |
| accountId | query | optional | string |
| status | query | optional | enum: draft | pending_approval | queued | posting | posted | partially_posted | cancelled | processing | failed |
| since | query | optional | string |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/posts" \
-H "Authorization: Bearer $API_KEY"200 response
{
"data": [
{
"postId": "abc123",
"status": "draft",
"media": {
"kind": "video",
"count": 0,
"thumbnailUrl": "https://example.com/media"
},
"caption": "A new post from HumanPost",
"hashtags": [
"string"
],
"sound": {
"mode": "trending",
"url": "https://example.com/media",
"urlsByPlatform": {
"tiktok": "https://example.com/media",
"instagram": "https://example.com/media"
}
},
"notes": "string",
"createdAt": "2026-07-15T12:00:00Z",
"accounts": [
{
"accountId": "abc123",
"username": "humanpost",
"platform": "tiktok",
"status": "draft",
"queuedAt": "2026-07-15T12:00:00Z",
"approvedAt": "2026-07-15T12:00:00Z",
"scheduledSlotStart": "2026-07-15T12:00:00Z",
"postedAt": "2026-07-15T12:00:00Z",
"postUrl": "https://example.com/media"
}
]
}
],
"nextCursor": "cursor_abc123"
}Responses
200Success/v2/posts/{postId}/queue
Queue an existing draft post
Adds one queue item per requested account to an existing post whose media is ready.
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| postId | path | required | string |
| Idempotency-Key | header | optional | string |
Request body
accountIdsarray<string>requiredmin items 1 · max items 50captionstringmax length 2200hashtagsarray<string>max items 30soundobject
modeenum: trending | original | specificrequiredurlstringformat: uriurlsByPlatformobject
tiktokstringformat: uriinstagramstringformat: urinotesstringmax length 2000priorityintegermin 0scheduledAfterstringformat: date-timeRequest
curl -X POST \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/posts/POST_ID/queue" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountIds": [
"abc123"
]
}'201 response
{
"postId": "abc123",
"status": "draft",
"media": {
"kind": "video",
"count": 0,
"thumbnailUrl": "https://example.com/media"
},
"caption": "A new post from HumanPost",
"hashtags": [
"string"
],
"sound": {
"mode": "trending",
"url": "https://example.com/media",
"urlsByPlatform": {
"tiktok": "https://example.com/media",
"instagram": "https://example.com/media"
}
},
"notes": "string",
"createdAt": "2026-07-15T12:00:00Z",
"accounts": [
{
"accountId": "abc123",
"username": "humanpost",
"platform": "tiktok",
"status": "draft",
"queuedAt": "2026-07-15T12:00:00Z",
"approvedAt": "2026-07-15T12:00:00Z",
"scheduledSlotStart": "2026-07-15T12:00:00Z",
"postedAt": "2026-07-15T12:00:00Z",
"postUrl": "https://example.com/media"
}
]
}Responses
200Idempotent replay201Post queued400Error404Error409Conflict (`media_not_ready`, `duplicate_queue_item`, or post already published)429Error/v2/posts/{postId}
Get a post
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| postId | path | required | string |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/posts/POST_ID" \
-H "Authorization: Bearer $API_KEY"200 response
{
"postId": "abc123",
"status": "draft",
"media": {
"kind": "video",
"count": 0,
"thumbnailUrl": "https://example.com/media"
},
"caption": "A new post from HumanPost",
"hashtags": [
"string"
],
"sound": {
"mode": "trending",
"url": "https://example.com/media",
"urlsByPlatform": {
"tiktok": "https://example.com/media",
"instagram": "https://example.com/media"
}
},
"notes": "string",
"createdAt": "2026-07-15T12:00:00Z",
"accounts": [
{
"accountId": "abc123",
"username": "humanpost",
"platform": "tiktok",
"status": "draft",
"queuedAt": "2026-07-15T12:00:00Z",
"approvedAt": "2026-07-15T12:00:00Z",
"scheduledSlotStart": "2026-07-15T12:00:00Z",
"postedAt": "2026-07-15T12:00:00Z",
"postUrl": "https://example.com/media"
}
]
}Responses
200Success404Error/v2/posts/{postId}
Update an editable post
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| postId | path | required | string |
Request body
captionstringmax length 2200hashtagsarray<string>max items 30soundobject
modeenum: trending | original | specificrequiredurlstringformat: uriurlsByPlatformobject
tiktokstringformat: uriinstagramstringformat: urinotesstring | nullmax length 2000Request
curl -X PATCH \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/posts/POST_ID" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"caption": "A new post from HumanPost"
}'200 response
{
"postId": "abc123",
"status": "draft",
"media": {
"kind": "video",
"count": 0,
"thumbnailUrl": "https://example.com/media"
},
"caption": "A new post from HumanPost",
"hashtags": [
"string"
],
"sound": {
"mode": "trending",
"url": "https://example.com/media",
"urlsByPlatform": {
"tiktok": "https://example.com/media",
"instagram": "https://example.com/media"
}
},
"notes": "string",
"createdAt": "2026-07-15T12:00:00Z",
"accounts": [
{
"accountId": "abc123",
"username": "humanpost",
"platform": "tiktok",
"status": "draft",
"queuedAt": "2026-07-15T12:00:00Z",
"approvedAt": "2026-07-15T12:00:00Z",
"scheduledSlotStart": "2026-07-15T12:00:00Z",
"postedAt": "2026-07-15T12:00:00Z",
"postUrl": "https://example.com/media"
}
]
}Responses
200Success409Error/v2/posts/{postId}
Cancel a post
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| postId | path | required | string |
| accountId | query | optional | string |
Request
curl -X DELETE \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/posts/POST_ID" \
-H "Authorization: Bearer $API_KEY"200 response
{
"postId": "abc123",
"status": "draft",
"media": {
"kind": "video",
"count": 0,
"thumbnailUrl": "https://example.com/media"
},
"caption": "A new post from HumanPost",
"hashtags": [
"string"
],
"sound": {
"mode": "trending",
"url": "https://example.com/media",
"urlsByPlatform": {
"tiktok": "https://example.com/media",
"instagram": "https://example.com/media"
}
},
"notes": "string",
"createdAt": "2026-07-15T12:00:00Z",
"accounts": [
{
"accountId": "abc123",
"username": "humanpost",
"platform": "tiktok",
"status": "draft",
"queuedAt": "2026-07-15T12:00:00Z",
"approvedAt": "2026-07-15T12:00:00Z",
"scheduledSlotStart": "2026-07-15T12:00:00Z",
"postedAt": "2026-07-15T12:00:00Z",
"postUrl": "https://example.com/media"
}
],
"cancellation": {
"cancelled": [
"string"
],
"skipped": [
{
"accountId": "abc123",
"reason": "currently_posting"
}
]
}
}Responses
200Success409Error/v2/posts/{postId}/analytics
Get post analytics
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| postId | path | required | string |
| limit | query | optional | integer |
| cursor | query | optional | string |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/posts/POST_ID/analytics" \
-H "Authorization: Bearer $API_KEY"200 response
{
"summary": {
"views": 0,
"likes": 0,
"comments": 0,
"shares": 0,
"saves": 0,
"engagementRate": 0,
"lastUpdated": "2026-07-15T12:00:00Z",
"postUrl": "https://example.com/media",
"accountId": "abc123",
"platform": "tiktok"
},
"history": [
{
"id": "abc123",
"videoId": "abc123",
"accountId": "abc123",
"platform": "tiktok",
"postUrl": "https://example.com/media",
"views": 0,
"likes": 0,
"comments": 0,
"shares": 0,
"saves": 0,
"collectedAt": "2026-07-15T12:00:00Z",
"taskId": "abc123"
}
],
"nextCursor": "cursor_abc123"
}Responses
200SuccessAccounts#
/v2/accounts
List publishing accounts
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| platform | query | optional | enum: tiktok | instagram |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts" \
-H "Authorization: Bearer $API_KEY"200 response
{
"data": [
{
"accountId": "abc123",
"platform": "tiktok",
"username": "humanpost",
"displayName": "string",
"status": "string",
"timezone": "string",
"followers": 0,
"postsToday": 0,
"dailyCap": 0,
"queueDepth": 0,
"nextWindow": "2026-07-15T12:00:00Z",
"lastPostAt": "2026-07-15T12:00:00Z"
}
]
}Responses
200Success/v2/accounts
Create a publishing account
Request body
platformenum: tiktok | instagramrequiredusernamestringrequiredmin length 1 · max length 100displayNamestringmin length 1 · max length 150warmupobjectrequired
searchTermsarray<string>requiredmin items 1 · max items 20instructionsstringmax length 2000managedPostingEnabledbooleancredentialsobject
emailstringrequiredformat: emailpasswordstringrequiredmin length 1 · max length 500Request
curl -X POST \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platform": "tiktok",
"username": "humanpost",
"warmup": {
"searchTerms": [
"string"
]
}
}'201 response
{
"accountId": "abc123",
"platform": "tiktok",
"username": "humanpost",
"displayName": "string",
"status": "string",
"timezone": "string",
"followers": 0,
"postsToday": 0,
"dailyCap": 0,
"queueDepth": 0,
"nextWindow": "2026-07-15T12:00:00Z",
"lastPostAt": "2026-07-15T12:00:00Z"
}Responses
201Success403Error409Error429Error/v2/accounts/{accountId}
Get a publishing account
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| accountId | path | required | string |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts/ACCOUNT_ID" \
-H "Authorization: Bearer $API_KEY"200 response
{
"accountId": "abc123",
"platform": "tiktok",
"username": "humanpost",
"displayName": "string",
"status": "string",
"timezone": "string",
"followers": 0,
"postsToday": 0,
"dailyCap": 0,
"queueDepth": 0,
"nextWindow": "2026-07-15T12:00:00Z",
"lastPostAt": "2026-07-15T12:00:00Z"
}Responses
200Success404Error/v2/accounts/{accountId}/queue
Get an account queue
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| accountId | path | required | string |
| limit | query | optional | integer |
| cursor | query | optional | string |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts/ACCOUNT_ID/queue" \
-H "Authorization: Bearer $API_KEY"200 response
{
"data": [
{
"postId": "abc123",
"queueItemId": "abc123",
"status": "draft",
"caption": "A new post from HumanPost",
"thumbnailUrl": "https://example.com/media",
"queuedAt": "2026-07-15T12:00:00Z",
"scheduledSlotStart": "2026-07-15T12:00:00Z"
}
],
"nextCursor": "cursor_abc123"
}Responses
200Success/v2/accounts/{accountId}/analytics
Get account analytics
Parameters
| Name | In | Required | Type |
|---|---|---|---|
| accountId | path | required | string |
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts/ACCOUNT_ID/analytics" \
-H "Authorization: Bearer $API_KEY"200 response
{
"accountId": "abc123",
"followers": 0,
"posts": 0,
"engagement": 0,
"analytics": {
"views": 0,
"likes": 0,
"comments": 0
},
"scannedPosts": 0
}Responses
200SuccessUsage & meta#
/v2/openapi.json
OpenAPI document
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/openapi.json" \
-H "Authorization: Bearer $API_KEY"200 response
{}Responses
200Success/v2/usage
Get plan and API usage
Request
curl -X GET \
"https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/usage" \
-H "Authorization: Bearer $API_KEY"200 response
{
"plan": "string",
"billingType": "string",
"videoQuota": 0,
"videoCount": 0,
"postCredits": {
"limit": 0,
"used": 0
},
"postsPerDay": 0,
"apiRequestsToday": 0,
"postsCreatedToday": 0
}Responses
200Success