Source: https://developers.tokportal.com/use-cases/industry/music-promotion-tiktok/
Markdown: https://developers.tokportal.com/use-cases/industry/music-promotion-tiktok.md

# Music Promotion on TikTok

Labels and artists can use TokPortal to organize TikTok content workflows by country. The API can create bundles, configure videos, include a TikTok sound URL, publish, and read analytics. It does not guarantee trending, virality, sound attribution outcomes, or reach.

## Create a music-focused bundle

```bash
curl -X POST https://app.tokportal.com/api/ext/bundles \
  -H "X-API-Key: $TOKPORTAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "bundle_type": "account_and_videos",
    "platform": "tiktok",
    "country": "US",
    "videos_quantity": 10,
    "title": "Track seed - US",
    "wants_advanced_warming": true,
    "advanced_warming_terms": [
      "new music friday",
      "dance challenge",
      "song lyrics",
      "indie pop",
      "studio session",
      "playlist recommendations"
    ],
    "external_ref": "track-summer-vibes-us"
  }'
```

`wants_advanced_warming: true` is mandatory whenever `advanced_warming_terms` (3-30 targets, count a multiple of 3, each 2-50 characters) or `advanced_warming_terms_count` is sent; without it the call fails with `ADVANCED_WARMING_FLAG_REQUIRED` and nothing is charged. At the standard rate of 5 credits per target, the 6 targets above are 30 credits, so this bundle is 32 for the account + 10 x 2 for the video slots + 30 = 82 credits.

Reference: [Create Bundle](https://developers.tokportal.com/create-bundle)

## Configure videos with a TikTok sound URL

```bash
curl -X PUT https://app.tokportal.com/api/ext/bundles/bnd_abc123/videos/batch \
  -H "X-API-Key: $TOKPORTAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "videos": [
      {
        "position": 1,
        "video_type": "video",
        "description": "Studio clip from the new track #newmusic",
        "target_publish_date": "2026-06-05",
        "video_url": "https://cdn.example.com/music/studio-clip.mp4",
        "tiktok_sound_url": "https://www.tiktok.com/music/example-sound-123456789",
        "external_ref": "summer-vibes-studio-us"
      },
      {
        "position": 2,
        "video_type": "video",
        "description": "Dance idea for the chorus #dance",
        "target_publish_date": "2026-06-07",
        "video_url": "https://cdn.example.com/music/dance-idea.mp4",
        "tiktok_sound_url": "https://www.tiktok.com/music/example-sound-123456789",
        "external_ref": "summer-vibes-dance-us"
      }
    ]
  }'
```

For TikTok videos, `tiktok_sound_url` is optional. For TikTok carousels, it is required. See the field reference in [Configure Videos](https://developers.tokportal.com/configure-videos).

`target_publish_date` cannot be earlier than today + 3 days while the account is still being created, or today + 1 once it is delivered or when the bundle runs on an existing account, and a bundle takes at most 3 videos per day — so a 10-slot seeding plan spans at least 4 dates.

## Roll out by country

`POST /bundles/bulk` handles one country per request:

```bash
for country in US UK FR DE; do
  curl -X POST https://app.tokportal.com/api/ext/bundles/bulk \
    -H "X-API-Key: $TOKPORTAL_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{
      \"accounts_count\": 2,
      \"upload_accounts_count\": 1,
      \"platforms\": [\"tiktok\"],
      \"country\": \"$country\",
      \"videos_per_account\": 8,
      \"wants_advanced_warming\": true,
      \"advanced_warming_terms\": [\"new music friday\", \"dance challenge\", \"song lyrics\"],
      \"external_ref\": \"track-summer-vibes-$country\"
    }"
done
```

`country` is the code from `GET /countries` (the United States is `USA` and the United Kingdom is `UK`; `US` and `GB` are accepted aliases); a country name fails with `INVALID_COUNTRY`. Warming targets are charged per account, so the 3 targets are 3 x 5 = 15 credits on each of the 2 accounts: (2 x 32) + (2 x 15) + (1 x 8 x 2) = 110 credits per country batch.

Reference: [Create Bulk](https://developers.tokportal.com/create-bulk)

## Content ideas that fit the API

- Lyric clips uploaded as `video_url`
- Dance prompts with `tiktok_sound_url`
- Behind-the-scenes videos
- Short artist messages localized by country
- Carousel posts where supported by the video configuration contract

## Track performance

```bash
curl -X GET "https://app.tokportal.com/api/ext/accounts/acc_abc123/analytics/videos?sort_by=views&sort_order=desc" \
  -H "X-API-Key: $TOKPORTAL_API_KEY"
```

Compare markets with the same metric definitions from [Analytics](https://developers.tokportal.com/analytics). Treat analytics as measurement, not as a guarantee of future reach.

Related docs: [Media Upload](https://developers.tokportal.com/media-upload), [Configure Videos](https://developers.tokportal.com/configure-videos), [Analytics](https://developers.tokportal.com/analytics), [MCP Server](https://developers.tokportal.com/mcp).
