Docs
Everything you can do in the dashboard also works over the REST API, the postramen CLI and MCP. Create an API key under API keys first.
Concepts
- Accounts: TikTok accounts you connected with “Connect TikTok”. Each has a numeric id.
- Media: one video (MP4/MOV/WebM) or 1–35 photos (JPG/WebP/PNG) per post. Upload files or pass public URLs.
- Mode:
directpublishes to the profile.draftsends the content to the creator's TikTok inbox to finish in the app. - privacy_level: required for direct posts. Use one of the account's
privacy_level_optionsfrom creator info:PUBLIC_TO_EVERYONE,MUTUAL_FOLLOW_FRIENDS,FOLLOWER_OF_CREATOR,SELF_ONLY. - Status:
scheduled → publishing → processing → published(orin_inboxfor drafts). Failures land infailedwith anerrorand can be retried.
REST API
Base URL https://postra.men/api/v1. Authenticate with Authorization: Bearer pr_….
GET /me
GET /accounts
GET /accounts/{id}/creator-info
POST /media multipart "file" or {"url": "https://…"}
POST /posts create / schedule a post
GET /posts?status=&limit=
GET /posts/{id}
POST /posts/{id}/cancel scheduled posts only
POST /posts/{id}/retry failed posts only
Post a video from a URL, scheduled:
curl https://postra.men/api/v1/posts \
-H "Authorization: Bearer $POSTRAMEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"account_id": 1,
"media_urls": ["https://example.com/clip.mp4"],
"caption": "Fresh bowl 🍜 #ramen",
"privacy_level": "PUBLIC_TO_EVERYONE",
"scheduled_at": "2026-11-20T19:30:00+08:00"
}'
Upload a local file, then post it:
curl https://postra.men/api/v1/media -H "Authorization: Bearer $POSTRAMEN_API_KEY" -F [email protected]
# → {"id": "k3j…", "url": "https://postra.men/media/k3j….mp4", …}
curl https://postra.men/api/v1/posts -H "Authorization: Bearer $POSTRAMEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"account_id": 1, "media_ids": ["k3j…"], "caption": "hi", "privacy_level": "SELF_ONLY"}'
All post fields
account_id int required media_ids [string] uploaded media ids media_urls [string] public URLs to import caption string video caption (≤2200) / photo description (≤4000) title string photo title (≤90) privacy_level string required when mode = direct mode string "direct" (default) | "draft" scheduled_at RFC3339 omit to post now disable_comment bool disable_duet bool disable_stitch bool brand_organic bool "Promotional content" label brand_content bool "Paid partnership" label (not with SELF_ONLY) is_aigc bool AI-generated label auto_add_music bool photos only cover_timestamp_ms int video cover frame
CLI
The same Go binary that runs this server. Build it with go build -o postramen . from the repo.
postramen login --key pr_… --url https://postra.men
postramen accounts
postramen creator 1
postramen post --account 1 --file clip.mp4 --caption "Fresh bowl 🍜" \
--privacy PUBLIC_TO_EVERYONE --wait
postramen post --account 1 --file a.jpg --file b.jpg --title "Menu" \
--privacy FOLLOWER_OF_CREATOR --at "2026-11-20 19:30"
postramen post --account 1 --url https://example.com/clip.mp4 --draft
postramen posts
postramen status 42 --wait
MCP
Postramen is a remote MCP server (Streamable HTTP) at https://postra.men/mcp. Tools: list_accounts, get_creator_info, upload_media, create_post, list_posts, get_post, cancel_post, retry_post.
Claude Code
claude mcp add --transport http postramen https://postra.men/mcp \ --header "Authorization: Bearer pr_…"
Any client with a JSON config
{
"mcpServers": {
"postramen": {
"type": "http",
"url": "https://postra.men/mcp",
"headers": { "Authorization": "Bearer pr_…" }
}
}
}