TokPortal is the managed social infrastructure API: real TikTok and Instagram accounts created, warmed and operated by human account managers in 16+ countries — exposed as a REST API and an MCP server. No OAuth per account, no 25-posts/day cap, no app review.
Docs https://developers.tokportal.com · API base https://app.tokportal.com/api/ext · OpenAPI https://developers.tokportal.com/openapi.json · MCP remote https://app.tokportal.com/api/ext/mcp · Get an API key https://app.tokportal.com/developer/api-keys · llms.txt https://developers.tokportal.com/llms.txt
Runnable quickstarts for the TokPortal API. Every example walks the same happy path:
- Create a bundle —
POST /bundles(a fresh managed TikTok account in the US + 1 video slot; credits are debited here) - Upload the video — presigned
POST /upload/video→PUT upload_url, or one-shot multipartPOST /upload/video/direct - Configure —
PUT /bundles/{id}/account(username, visible name, bio) andPUT /bundles/{id}/videos/1(video_type,video_url=public_url,description,target_publish_date).target_publish_dateis the first day of a 2-day publishing window — the manager may post that day or the next — and the end day is derived (that day + 1);target_publish_end_dateis rejected on this endpoint. Minimum lead time: 3 days ahead while the account is still being created, 1 day for an existing or delivered account (the quickstarts use today + 7). Publishing may still shift a date; the publish response reports it inadjusted_videos. - Publish —
GET /bundles/{id}/publish-readinessthenPOST /bundles/{id}/publish - Get the account —
GET /bundles/{id}→saved_account_id→GET /accounts/{saved_account_id}(username,profile_url); or listen to theaccount.in_review/account.finalizedwebhooks
| Folder | Stack | Files |
|---|---|---|
curl/ |
bash + curl + jq | quickstart.sh (presigned upload) |
node/ |
Node 18+ | quickstart.mjs (@tokportal/node SDK, direct upload) · quickstart-fetch.mjs (plain fetch, presigned upload) |
python/ |
Python 3.9+ | quickstart.py (tokportal SDK, direct upload) · quickstart_requests.py (plain requests, presigned upload) |
export TOKPORTAL_API_KEY=sk_your_key_here # https://app.tokportal.com/developer/api-keys
# curl
./curl/quickstart.sh ./launch.mp4
# node
cd node && npm install && node quickstart.mjs ../launch.mp4
# python
cd python && pip install -r requirements.txt && python quickstart.py ../launch.mp4Heads-up. These scripts hit production (
https://app.tokportal.com/api/ext) — there is no public sandbox yet — andPOST /bundlesdebits credits immediately. They are syntactically validated in CI (node --check,py_compile,bash -n) and their endpoints/fields are taken from the public OpenAPI document, but they are not executed against a sandbox in CI. Read them before running.
The same flow is one sentence away with the MCP server:
npx -y tokportal-mcp # TOKPORTAL_API_KEY=sk_...See https://github.com/tokportal/tokportal-mcp for Cursor / Claude / VS Code / Windsurf / Codex / Gemini CLI configs, or use the remote server at https://app.tokportal.com/api/ext/mcp.
- Guides: https://developers.tokportal.com (bundles, media upload, webhooks, analytics, advanced warming, bans & appeals)
- SDKs & CLI:
@tokportal/node·tokportal(PyPI) ·tokportal-go·@tokportal/cli - Security: report vulnerabilities to security@tokportal.com (see SECURITY.md)
MIT © TokPortal