Create Bundle
Create a new bundle to provision an account, upload videos, or both.
POST /bundles
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | One of account_only, account_and_videos, videos_only. |
platform | string | Yes | Target platform: tiktok, instagram, or youtube. |
country | string | Yes | ISO 3166-1 alpha-2 country code. Must be enabled for your organization. |
videos_quantity | integer | Conditional | Number of videos. Required when type is account_and_videos or videos_only. |
edits_quantity | integer | No | Number of video edits. Must be <= videos_quantity. Defaults to 0. |
existing_account_id | string | Conditional | Required when type is videos_only. The account to upload videos to. |
options | object | No | Additional bundle options (see below). |
metadata | object | No | Arbitrary key-value pairs for your own tracking. |
Options Object
| Field | Type | Default | Description |
|---|---|---|---|
niche_warming | boolean | false | Enable niche warming. Cannot combine with deep_warming. |
deep_warming | boolean | false | Enable deep warming. Instagram only. Cannot combine with niche_warming. |
moderation | boolean | false | Enable content moderation. |
editing | boolean | false | Include video editing services. |
auto_finalize_videos | boolean | false | Automatically finalize videos when ready. |
Validation Rules
countrymust be enabled for your organization.deep_warmingis only available oninstagram.niche_warminganddeep_warmingare mutually exclusive.edits_quantitymust be less than or equal tovideos_quantity.existing_account_idis required and only valid whentypeisvideos_only.
Response
The response includes the created bundle along with credit usage information.
| Field | Type | Description |
|---|---|---|
data | object | The created bundle. |
credits_charged | integer | Credits deducted for this bundle. |
credits_remaining | integer | Your remaining credit balance. |
cost_breakdown | object | Itemized 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
| Status | Code | Description |
|---|---|---|
400 | invalid_type | Invalid bundle type. |
400 | invalid_platform | Unsupported platform. |
400 | country_not_enabled | Country is not enabled for your organization. |
400 | deep_warming_instagram_only | deep_warming is only available on Instagram. |
400 | warming_conflict | niche_warming and deep_warming cannot both be enabled. |
400 | edits_exceed_videos | edits_quantity exceeds videos_quantity. |
402 | insufficient_credits | Not enough credits to create this bundle. |
404 | account_not_found | existing_account_id does not exist. |