Source: https://developers.tokportal.com/use-cases/industry/dtc-multi-market-launch/
Markdown: https://developers.tokportal.com/use-cases/industry/dtc-multi-market-launch.md

# DTC Multi-Market Launch

DTC brands can use TokPortal to coordinate country-specific TikTok and Instagram workflows. The current API pattern is explicit: create bundles per market, configure localized content, publish each bundle, then compare analytics.

There is no `countries` array in the public bulk endpoint. Multi-market launches loop over countries.

## 1. Validate target countries

```bash
curl -X GET https://app.tokportal.com/api/ext/countries \
  -H "X-API-Key: $TOKPORTAL_API_KEY"
```

Use the enabled country codes from the response. Most are ISO alpha-2 (`FR`, `DE`, `BR`), but the United States is `USA` and the United Kingdom is `UK`; the aliases `US` and `GB` are accepted and resolved to those. A full country name is rejected with `INVALID_COUNTRY`.

## 2. Create one bulk batch per country

```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\", \"instagram\"],
      \"country\": \"$country\",
      \"videos_per_account\": 6,
      \"wants_moderation\": true,
      \"wants_advanced_warming\": true,
      \"advanced_warming_terms\": [\"product demo\", \"honest review\", \"daily lifestyle vlog\"],
      \"external_ref\": \"spring-launch-$country\"
    }"
done
```

For each country, this creates 2 bundles per platform. One bundle per platform includes video slots.

`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; the whole batch is rejected with `ADVANCED_WARMING_FLAG_REQUIRED` otherwise, and nothing is charged. Targets are charged per account at the standard rate of 5 credits each, so the 3 targets are 15 credits on each of the 4 accounts: (4 x 32) + (4 x 15) + (2 x 6 x 2) = 212 credits per country batch, before moderation.

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

## 3. Configure localized content

Store your localized copy in your CMS or campaign database, then configure the correct bundle for each market:

```bash
curl -X PUT https://app.tokportal.com/api/ext/bundles/bnd_us_123/videos/batch \
  -H "X-API-Key: $TOKPORTAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "videos": [
      {
        "position": 1,
        "video_type": "video",
        "description": "New drop is live. #newarrival #launch",
        "target_publish_date": "2026-06-05",
        "video_url": "https://cdn.example.com/launch/hero.mp4",
        "external_ref": "spring-launch-us-hero"
      }
    ]
  }'
```

For an Instagram Reel, include `instagram_content_type: "reel"`:

```json
{
  "position": 1,
  "video_type": "video",
  "instagram_content_type": "reel",
  "description": "Nouvelle collection disponible. #nouveaute",
  "target_publish_date": "2026-06-06",
  "video_url": "https://cdn.example.com/launch/hero-fr.mp4",
  "external_ref": "spring-launch-fr-hero"
}
```

Reference: [Configure Videos](https://developers.tokportal.com/configure-videos)

## 4. Publish per bundle

Publish each configured bundle:

```bash
curl -X POST https://app.tokportal.com/api/ext/bundles/bnd_us_123/publish \
  -H "X-API-Key: $TOKPORTAL_API_KEY"
```

Before publishing at scale, check readiness:

```bash
curl -X GET https://app.tokportal.com/api/ext/bundles/bnd_us_123/publish-readiness \
  -H "X-API-Key: $TOKPORTAL_API_KEY"
```

Reference: [Publish & Unpublish](https://developers.tokportal.com/publish-unpublish)

## 5. Monitor and compare

Use webhooks for lifecycle updates:

```bash
curl -X POST https://app.tokportal.com/api/ext/webhooks \
  -H "X-API-Key: $TOKPORTAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/webhooks/tokportal",
    "events": ["bundle.published", "account.finalized", "video.finalized"],
    "description": "DTC launch monitor"
  }'
```

Use analytics after delivery:

```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"
```

References: [Webhooks](https://developers.tokportal.com/webhooks), [Analytics](https://developers.tokportal.com/analytics)

## Launch checklist

- Keep one internal `external_ref` per country/platform campaign.
- Store returned bundle IDs immediately.
- Configure account profiles before publishing.
- Use public URLs or [Media Upload](https://developers.tokportal.com/media-upload) for video assets.
- Localize captions manually; the API does not translate copy for you.
- Schedule no earlier than today + 3 days while an account is still being created (today + 1 once it is delivered or on an existing account), and no more than 3 videos per day per bundle.
- Review delivered videos within about 72 hours; anything left in review auto-finalizes regardless of `auto_finalize_videos`.
- Split larger launches across multiple requests and respect [Rate Limits](https://developers.tokportal.com/rate-limits).

Related guides: [Bulk TikTok Account Creation](https://developers.tokportal.com/use-cases/platform-guides/bulk-tiktok-accounts-api), [UGC Distribution](https://developers.tokportal.com/use-cases/industry/ugc-distribution-at-scale), [Agency Management](https://developers.tokportal.com/use-cases/industry/agency-multi-client-management).
