Skip to main content

Create Bundle

Create a new bundle to provision an account, upload videos, or both.

POST /bundles

Request Body

FieldTypeRequiredDescription
typestringYesOne of account_only, account_and_videos, videos_only.
platformstringYesTarget platform: tiktok, instagram, or youtube.
countrystringYesISO 3166-1 alpha-2 country code. Must be enabled for your organization.
videos_quantityintegerConditionalNumber of videos. Required when type is account_and_videos or videos_only.
edits_quantityintegerNoNumber of video edits. Must be <= videos_quantity. Defaults to 0.
existing_account_idstringConditionalRequired when type is videos_only. The account to upload videos to.
optionsobjectNoAdditional bundle options (see below).
metadataobjectNoArbitrary key-value pairs for your own tracking.

Options Object

FieldTypeDefaultDescription
niche_warmingbooleanfalseEnable niche warming. Cannot combine with deep_warming.
deep_warmingbooleanfalseEnable deep warming. Instagram only. Cannot combine with niche_warming.
moderationbooleanfalseEnable content moderation.
editingbooleanfalseInclude video editing services.
auto_finalize_videosbooleanfalseAutomatically finalize videos when ready.

Validation Rules

  • country must be enabled for your organization.
  • deep_warming is only available on instagram.
  • niche_warming and deep_warming are mutually exclusive.
  • edits_quantity must be less than or equal to videos_quantity.
  • existing_account_id is required and only valid when type is videos_only.

Response

The response includes the created bundle along with credit usage information.

FieldTypeDescription
dataobjectThe created bundle.
credits_chargedintegerCredits deducted for this bundle.
credits_remainingintegerYour remaining credit balance.
cost_breakdownobjectItemized cost breakdown.

Examples

1. Account Only

curl -X POST https://app.tokportal.com/api/ext/bundles \
-H "X-API-Key: tok_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"type": "account_only",
"platform": "tiktok",
"country": "US"
}'

Response:

{
"data": {
"id": "bnd_a1b2c3",
"type": "account_only",
"platform": "tiktok",
"country": "US",
"status": "pending_setup",
"options": {
"niche_warming": false,
"deep_warming": false,
"moderation": false,
"editing": false,
"auto_finalize_videos": false
},
"created_at": "2026-02-10T09:00:00Z"
},
"credits_charged": 10,
"credits_remaining": 490,
"cost_breakdown": {
"account": 10,
"videos": 0,
"edits": 0,
"niche_warming": 0,
"deep_warming": 0,
"moderation": 0
}
}

2. Account and Videos with Warming

curl -X POST https://app.tokportal.com/api/ext/bundles \
-H "X-API-Key: tok_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"type": "account_and_videos",
"platform": "instagram",
"country": "FR",
"videos_quantity": 5,
"edits_quantity": 2,
"options": {
"deep_warming": true,
"editing": true
}
}'

Response:

{
"data": {
"id": "bnd_d4e5f6",
"type": "account_and_videos",
"platform": "instagram",
"country": "FR",
"status": "pending_setup",
"videos_quantity": 5,
"edits_quantity": 2,
"options": {
"niche_warming": false,
"deep_warming": true,
"moderation": false,
"editing": true,
"auto_finalize_videos": false
},
"created_at": "2026-02-10T09:05:00Z"
},
"credits_charged": 85,
"credits_remaining": 405,
"cost_breakdown": {
"account": 10,
"videos": 50,
"edits": 10,
"niche_warming": 0,
"deep_warming": 5,
"moderation": 0
}
}

3. Videos Only on Existing Account

curl -X POST https://app.tokportal.com/api/ext/bundles \
-H "X-API-Key: tok_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"type": "videos_only",
"platform": "tiktok",
"country": "US",
"videos_quantity": 3,
"existing_account_id": "acc_x7y8z9",
"options": {
"moderation": true,
"auto_finalize_videos": true
}
}'

Response:

{
"data": {
"id": "bnd_g7h8i9",
"type": "videos_only",
"platform": "tiktok",
"country": "US",
"status": "pending_setup",
"videos_quantity": 3,
"edits_quantity": 0,
"existing_account_id": "acc_x7y8z9",
"options": {
"niche_warming": false,
"deep_warming": false,
"moderation": true,
"editing": false,
"auto_finalize_videos": true
},
"created_at": "2026-02-10T09:10:00Z"
},
"credits_charged": 35,
"credits_remaining": 370,
"cost_breakdown": {
"account": 0,
"videos": 30,
"edits": 0,
"niche_warming": 0,
"deep_warming": 0,
"moderation": 5
}
}

Error Responses

StatusCodeDescription
400invalid_typeInvalid bundle type.
400invalid_platformUnsupported platform.
400country_not_enabledCountry is not enabled for your organization.
400deep_warming_instagram_onlydeep_warming is only available on Instagram.
400warming_conflictniche_warming and deep_warming cannot both be enabled.
400edits_exceed_videosedits_quantity exceeds videos_quantity.
402insufficient_creditsNot enough credits to create this bundle.
404account_not_foundexisting_account_id does not exist.