# Post 100 TikTok videos a day with Zapier

Source: https://developers.tokportal.com/agents/zapier/post-100-videos-a-day/
Markdown: https://developers.tokportal.com/agents/zapier/post-100-videos-a-day.md

Posting 100 videos a day from Zapier is a scheduling problem, not an API problem: TokPortal caps each bundle at **3 videos per calendar day**, so 100 posts/day means at least 34 accounts each carrying 3 dated slots, filled with `batch_configure_bundle_videos` or `import_bundle_videos_csv` and pushed with `publish_bundle`. Human managers post through the native app on real, geo-targeted accounts, so there is no per-account OAuth, no app review and no official 6-requests-per-minute token limit in the loop.

## Connect TokPortal to Zapier

Zapier is a workflow / low-code platform: Automation platform; today TokPortal is used via Webhooks by Zapier (REST) — a native TokPortal app is coming.

**Webhooks by Zapier → Custom Request** action:

- Method `POST` · URL `https://app.tokportal.com/api/ext/bundles`
- Headers: `X-API-Key: sk_...` and `Content-Type: application/json`
- Data: the JSON body from the examples below.

Inbound events: create a **Webhooks by Zapier → Catch Hook** trigger, then register its URL with `POST /webhooks` (or `tokportal_create_webhook_endpoint`) for the events you want (`account.finalized`, `video.finalized`, `account.banned`…). A native Zapier app is in preparation; the REST path keeps working. Guide: [Zapier + social media automation](https://developers.tokportal.com/use-cases/no-code/zapier-social-media-automation).

Snippet status: **best-effort** — follows Zapier's documented pattern ([source](https://help.zapier.com/hc/en-us/articles/8496288690317-Set-up-a-webhook-trigger-in-Zaps)); tell us if a field name changed.

Dedicated guide: [Zapier + TokPortal](https://developers.tokportal.com/use-cases/no-code/zapier-social-media-automation).

Once connected, sanity-check the setup with a read-only call: "What is my TokPortal credit balance?" should trigger `tokportal_get_credit_balance`. GET requests and dry-run writes do not spend credits.

## Try the workflow without spending

For this trial, use the remote MCP endpoint `https://app.tokportal.com/api/ext/mcp`, local `tokportal-mcp` **1.15.1 or later**, or the REST API. Upgrade and restart an older local server first. Version 1.15.0 does not forward the dry-run header; do not use its write tools for a simulation. If you cannot verify the installed local version, use the remote endpoint or REST.

Use the [sandbox](https://developers.tokportal.com/sandbox) for the first attempt. MCP write tools accept `dry_run: true` as a top-level argument, beside `body`; REST writes accept the `X-TokPortal-Dry-Run: true` header. Keep your usual authentication and scopes. Each simulated write validates the request and returns `credits_would_charge` with `credits_charged: 0`. Nothing is created or published.

Simulated IDs start with `00000000-0000-4000-8000-`. Use them only in later dry-run writes. GET requests read real data, so skip publish-readiness checks and polling for synthetic IDs. Simulations have no cross-call memory and upload URLs are placeholders: do not upload files to them.

To run for real, review the returned price and confirm **before the first live write**. Bundle creation charges credits immediately; publishing hands the order to a manager. Repeat creation without dry-run mode and use the new real IDs for configuration and publishing. A synthetic ID cannot be reused in a live request.

## How it works

Start from the cap: `target_publish_date` accepts at most 3 videos per day per bundle and rejects the 4th with `VIDEOS_PER_DAY_EXCEEDED`. So the agent first decides on a fleet size — 34 accounts for 100/day, 50 for 150/day — and either reuses delivered accounts (`videos_only` bundles pointing at an `account_id`) or orders new ones with `create_bundles_bulk` (`accounts_count`, `videos_per_account`). One bundle of 90 videos on one account is 30 days of posting; ten bundles of 90 spread over ten accounts is 30 posts a day.

Media comes first: `upload_video` returns a presigned URL you PUT the file to (or use `upload_video_direct` for a multipart upload from a script), and the resulting `public_url` goes into each slot's `video_url`. Then the agent fills slots. `batch_configure_bundle_videos` accepts up to 500 items in one call with `position`, `video_type`, `description`, `target_publish_date`, `video_url` and optional `tiktok_sound_url`, `ai_content_disclaimer`, `disclose_as_ads`. From a spreadsheet, `import_bundle_videos_csv` does the same with one file. When a bundle passes `get_bundle_publish_readiness`, `publish_bundle` sends it to the manager, and every video moves `configured → published → in_review → finalized`, with `video.published` / `video.finalized` webhooks if you register an endpoint. `auto_finalize_videos` (default true) closes the review loop after 72 hours without you.

Because managers post by hand, TokPortal does not offer minute-level timing; you schedule per day and the manager posts within that day. That is the trade for accounts that behave like local creators rather than API-flagged publishers.

## Run it from Zapier

In Zapier the same sequence becomes nodes/steps: either an AI Agent step with the TokPortal tools and the prompt below as its instruction, or one deterministic step per tool. Set `dry_run: true` on MCP write tools, or `X-TokPortal-Dry-Run: true` on HTTP write steps. Map `data.bundle_id` from bundle creation into later simulated write steps; poll only after a real run.

**Tool sequence**

1. `tokportal_get_credit_costs` — 2 credits per video slot at the standard rate; multiply by the daily volume before committing.
2. `tokportal_list_accounts` — Find delivered accounts to reuse (`platform=tiktok`, `banned=false`); each account = 3 slots/day.
3. `tokportal_create_bundles_bulk` — Or order the fleet: `platforms:["tiktok"]`, `country`, `accounts_count`, `videos_per_account` (≤500).
4. `tokportal_create_bundle` — For existing accounts: `bundle_type: videos_only`, `account_id`, `videos_quantity`.
5. `tokportal_upload_video` — Presigned upload per file → `public_url` used as `video_url` (or `upload_video_direct` for multipart).
6. `tokportal_batch_configure_bundle_videos` — Up to 500 slots in one call; the server enforces the 3/day cap per bundle and returns per-item errors.
7. `tokportal_import_bundle_videos_csv` — Alternative: one CSV per bundle with position, description, target\_publish\_date, video\_url…
8. `tokportal_get_bundle_publish_readiness` — Ensures every slot has media and a date before publishing.
9. `tokportal_publish_bundle` — Sends the bundle to the manager; repeat per bundle.
10. `tokportal_create_webhook_endpoint` — Subscribe to `video.published`, `video.finalized`, `video.pending_corrections` to track the 100 daily posts without polling.

**Prompt to paste**

```text
Evaluate this workflow in the TokPortal sandbox only.
Use the remote MCP endpoint https://app.tokportal.com/api/ext/mcp or local tokportal-mcp 1.15.1 or later for write tools.
Verify the installed local version before using its write tools. Version 1.15.0 is unsafe for simulations.
If the local version is older or unknown, use the remote endpoint or authenticated REST
requests with X-TokPortal-Dry-Run: true instead.
For every non-GET MCP tool call, set dry_run: true as a top-level boolean beside body.
For every REST write in a workflow, send the X-TokPortal-Dry-Run: true header.
Use normal read tools for existing real objects. Do not GET or poll synthetic IDs,
and do not upload files to simulated upload URLs. Simulated objects have no cross-call memory.
Show credits_would_charge and verify credits_charged is 0 for each simulated write.
Do not execute any live write. Ask for my explicit GO before the first real write,
including bundle creation, which charges immediately. After GO, repeat creation
without dry_run and use the new real IDs; never reuse synthetic IDs in live requests.

Use the TokPortal MCP tools. Goal: 100 TikTok posts per day in the US for 30 days.
1) list_accounts (tiktok, US, banned=false) and count how many I can reuse.
2) Compute how many extra accounts are needed given 3 videos/day/bundle and quote it via get_credit_costs.
3) Draft the create_bundles_bulk and batch_configure_bundle_videos payloads for the first bundle
   (dates 2026-09-01 → 2026-09-30, 3 per day), simulate them and report credits_would_charge.
```

Use one Custom Request step per API call; Zapier exposes each response field for mapping into the next step.

**REST equivalent** (write requests below are simulations; GET requests read existing real data)

```bash
# Fleet: 34 accounts × 90 slots (30 days × 3/day)
curl -X POST -H "X-TokPortal-Dry-Run: true" https://app.tokportal.com/api/ext/bundles/bulk \
  -H "X-API-Key: sk_..." -H "Content-Type: application/json" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"platforms":["tiktok"],"country":"US","accounts_count":34,"videos_per_account":90}'

# Fill one bundle's slots (3 per day)
curl -X PUT -H "X-TokPortal-Dry-Run: true" https://app.tokportal.com/api/ext/bundles/BUNDLE_ID/videos/batch \
  -H "X-API-Key: sk_..." -H "Content-Type: application/json" \
  -d '{"videos":[
    {"position":1,"video_type":"video","description":"Day 1 – hook A #fyp","target_publish_date":"2026-09-01","video_url":"https://.../a.mp4"},
    {"position":2,"video_type":"video","description":"Day 1 – hook B","target_publish_date":"2026-09-01","video_url":"https://.../b.mp4"},
    {"position":3,"video_type":"video","description":"Day 1 – hook C","target_publish_date":"2026-09-01","video_url":"https://.../c.mp4"}
  ]}'

curl -X POST -H "X-TokPortal-Dry-Run: true" https://app.tokportal.com/api/ext/bundles/BUNDLE_ID/publish -H "X-API-Key: sk_..."
```

## Key parameters

| Parameter                              | Values                   | Notes                                                                      |
| -------------------------------------- | ------------------------ | -------------------------------------------------------------------------- |
| `target_publish_date`                  | YYYY-MM-DD               | Max 3 videos per day per bundle → VIDEOS\_PER\_DAY\_EXCEEDED on the 4th.   |
| `videos_quantity / videos_per_account` | 0–500                    | Slots per bundle; add more later with add\_video\_slots.                   |
| `accounts_count`                       | 1–100 per bulk call      | 100 posts/day needs ≥34 accounts.                                          |
| `video_type`                           | video · carousel · story | description required for video/carousel (≤2200 chars).                     |
| `video_url`                            | URI                      | From upload\_video / upload\_video\_direct public\_url, or any public URL. |
| `tiktok_sound_url`                     | URI                      | Manager uses this sound; volume fields cost 1 credit.                      |
| `auto_finalize_videos`                 | boolean (default true)   | Auto-closes review after 72 h in in\_review.                               |

Full schemas: [OpenAPI reference](https://developers.tokportal.com/api-reference) · [openapi.json](https://developers.tokportal.com/openapi.json).

## Example configurations

**30-day schedule on an existing account**

```json
{"bundle_type":"videos_only","account_id":"ACCOUNT_UUID","videos_quantity":90,"title":"Sept schedule"}
```

**Batch item with sound and AI label**

```json
{"position":7,"video_type":"video","description":"POV: first day at the gym #gymtok",
 "target_publish_date":"2026-09-03","video_url":"https://pub-xxx.r2.dev/videos/b/7.mp4",
 "tiktok_sound_url":"https://www.tiktok.com/music/original-sound-7300000000000000000",
 "ai_content_disclaimer":true}
```

**Webhook for tracking**

```json
{"url":"https://hooks.example.com/tokportal","events":["video.published","video.finalized","video.pending_corrections"]}
```

## Credits

Video slots cost 2 credits each at the standard rate (100 posts/day ≈ 200 credits/day), plus 32 credits per new account if you order the fleet with `create_bundles_bulk`. Sound volume control adds 1 credit per video. Read the live rates with `get_credit_costs`; see [Credits & Pricing](https://developers.tokportal.com/credits).

## Why not the official API

The official TikTok Content Posting API needs one OAuth grant per account with the `video.publish` scope, limits each user access token to 6 requests per minute, keeps every post private until your app passes TikTok's audit, and returns `spam_risk_too_many_posts` when a user hits the (unpublished) daily cap — commonly reported at roughly 15–25 posts per account per day. Running 100 posts a day that way means dozens of audited OAuth grants and constant cap handling. TokPortal moves the volume onto many human-operated accounts, three dated posts each per day.

As of August 2026 the first-party routes look like this. TikTok's Content Posting API (Direct Post) requires each account owner to authorize your app with the `video.publish` scope, limits every user access token to 6 requests per minute, keeps all posts from unaudited apps in private viewing mode until TikTok audits the app, and enforces an unpublished daily post cap per user (`spam_risk_too_many_posts`) that integrators commonly report at roughly 15–25 posts per account per day. Meta's Instagram Content Publishing API allows 100 API-published posts per professional account in a 24-hour moving window and only for accounts you own and connect via OAuth. Neither creates accounts, warms them, or reports third-party bans. TokPortal is human-operated infrastructure: accounts created and run by managers in the target country, one `X-API-Key` for all of them, dated slots (max 3 per day per bundle) instead of per-account tokens.

Sources: [TikTok Content Posting API – Direct Post](https://developers.tiktok.com/doc/content-posting-api-reference-direct-post), [TikTok Content Posting API – Get started](https://developers.tiktok.com/doc/content-posting-api-get-started), [Instagram Platform – Content Publishing](https://developers.facebook.com/docs/instagram-platform/content-publishing).

## FAQ

### Why exactly 3 videos per day per bundle?

It is the platform-safe cadence TokPortal enforces since 2026-08-16 to keep accounts healthy; the cap counts every non-cancelled slot with a date on that day. Scale horizontally with more accounts, not more posts per account.

### Can the agent set the posting hour?

No — `target_publish_date` is a day. The manager posts within that day in local time; if you need a specific hour, say so in `editing_instructions` and it is best-effort.

### What happens if a manager misses a day?

The slot stays `configured`/`published` and is carried over; you can `unschedule_bundle_video` and reconfigure the date, or `request_bundle_video_corrections`. Late posts never silently disappear.

### Is there a request rate limit on my side?

Yes, 120 requests/minute per API key (`X-RateLimit-*` headers, 429 + `Retry-After`). Batch calls (500 items) and CSV import keep you far below it even at 100 posts/day.

## Related

- [Configure videos & daily cap](https://developers.tokportal.com/configure-videos)
- [CSV import](https://developers.tokportal.com/csv-import)
- [Media upload](https://developers.tokportal.com/media-upload)
- [UGC distribution at scale](https://developers.tokportal.com/use-cases/industry/ugc-distribution-at-scale)
- [MCP server](https://developers.tokportal.com/mcp)

## Also works with

- [Post 100 TikTok videos a day with Langflow](https://developers.tokportal.com/agents/langflow/post-100-videos-a-day)
- [Post 100 TikTok videos a day with CrewAI](https://developers.tokportal.com/agents/crewai/post-100-videos-a-day)
- [Post 100 TikTok videos a day with LangChain](https://developers.tokportal.com/agents/langchain/post-100-videos-a-day)
- [Post 100 TikTok videos a day with Vercel AI SDK](https://developers.tokportal.com/agents/vercel-ai-sdk/post-100-videos-a-day)
- [Post 100 TikTok videos a day with Mastra](https://developers.tokportal.com/agents/mastra/post-100-videos-a-day)
- [Post 100 TikTok videos a day with Claude](https://developers.tokportal.com/agents/claude/post-100-videos-a-day)

[All 25 agents for "Post 100 TikTok videos a day"](https://developers.tokportal.com/agents/for/post-100-videos-a-day)

## Other jobs with Zapier

- [Create TikTok accounts with Zapier](https://developers.tokportal.com/agents/zapier/create-tiktok-accounts)
- [Run US TikTok accounts from abroad with Zapier](https://developers.tokportal.com/agents/zapier/us-tiktok-accounts-from-abroad)
- [Warm TikTok & Instagram accounts with Zapier](https://developers.tokportal.com/agents/zapier/warm-accounts)
- [Run a faceless TikTok channel with Zapier](https://developers.tokportal.com/agents/zapier/faceless-channel)
- [Seed UGC across many accounts with Zapier](https://developers.tokportal.com/agents/zapier/ugc-seeding)
- [Seed a music sound on TikTok with Zapier](https://developers.tokportal.com/agents/zapier/music-sound-seeding)
- [Launch an app with persona accounts with Zapier](https://developers.tokportal.com/agents/zapier/app-persona-launch)
- [Run multi-client agency operations with Zapier](https://developers.tokportal.com/agents/zapier/agency-multi-client)
- [Get ban alerts via webhooks with Zapier](https://developers.tokportal.com/agents/zapier/ban-webhooks)
- [Pull analytics across all accounts with Zapier](https://developers.tokportal.com/agents/zapier/analytics-multi-account)
- [Create Instagram accounts with Zapier](https://developers.tokportal.com/agents/zapier/create-instagram-accounts)
