# PostRoutine — Full Documentation PostRoutine is a social media scheduling platform with a REST API, a hosted MCP server, and webhooks for publishing across Instagram, Facebook, X (Twitter), LinkedIn, YouTube, TikTok, Threads, Pinterest, Bluesky, Reddit, Telegram, Discord, Google Business, Snapchat, WhatsApp (templates), Slack, and more. Base URL: https://qnadvdhrowsqgqimlues.supabase.co/functions/v1/api/v1 OpenAPI: https://postroutine.io/openapi.json MCP endpoint: https://www.postroutine.io/api/mcp Agent instructions: https://postroutine.io/AGENTS.md Skill: https://postroutine.io/SKILL.md Site index: https://postroutine.io/llms.txt Markdown docs (prefer for agents): https://www.postroutine.io/docs/index.md Cursor setup: https://postroutine.io/cursor Codex setup: https://postroutine.io/codex ================================================================================ # Authentication ================================================================================ Every request must include an API key in the Authorization header: Authorization: Bearer pr_live_xxxxxxxxxxxxxxxx Generate keys at https://postroutine.io/dashboard/api-keys. Keys are scoped (read / read-write) and may be brand-restricted. ================================================================================ # Rate limits ================================================================================ 100 requests per minute per API key. Response headers: RateLimit-Limit: 100 RateLimit-Remaining: 73 RateLimit-Reset: 1745000000 # epoch seconds On 429, sleep until RateLimit-Reset. ================================================================================ # Quickstart ================================================================================ 1) Get an API key from /dashboard/api-keys. 2) List connected social accounts: curl https://qnadvdhrowsqgqimlues.supabase.co/functions/v1/api/v1/social-accounts \ -H "Authorization: Bearer pr_YOUR_KEY" 3) Create a scheduled post: curl -X POST https://qnadvdhrowsqgqimlues.supabase.co/functions/v1/api/v1/posts \ -H "Authorization: Bearer pr_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "caption": "Hello from the PostRoutine API", "social_accounts": ["acc_uuid_here"], "scheduled_at": "2026-04-20T15:00:00Z" }' Or auto-schedule to the next queue slot: curl -X POST https://qnadvdhrowsqgqimlues.supabase.co/functions/v1/api/v1/posts \ -H "Authorization: Bearer pr_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"caption": "Queued post", "social_accounts": ["acc_uuid"], "use_queue": true}' ================================================================================ # Endpoints (summary) ================================================================================ Posts GET /posts List posts (filters: status, brand_id, dateFrom, dateTo, page, limit) POST /posts Create draft / scheduled / immediate post GET /posts/{id} Get a single post PATCH /posts/{id} Update a post DELETE /posts/{id} Delete a post POST /posts/{id}/cancel Cancel a scheduled post Social accounts GET /social-accounts List accounts GET /social-accounts/{id} Get account GET /social-accounts/{id}/pinterest-boards List Pinterest boards Brands GET /brands List brands GET /brands/{id} Get brand Media GET /media List media assets POST /media/presign Get presigned upload URL (then PUT file, PATCH /media/{id}/complete) PATCH /media/{id}/complete Mark upload finished after PUT to presigned URL GET /media/{id} Get media DELETE /media/{id} Delete media Queues GET /queues List queues POST /queues Create queue GET /queues/{id} Get queue PATCH /queues/{id} Update queue DELETE /queues/{id} Delete queue GET /queues/{id}/slots List queue time slots Post results GET /post-results All post-target results (per platform) GET /post-results/{id} Single post-target result Workspace GET /workspaces Workspaces you belong to GET /workspaces/{id} Get workspace ================================================================================ # platform_configurations ================================================================================ Pass per-platform fields with the platform_configurations object on POST /posts: { "caption": "...", "social_accounts": ["acc_uuid_yt", "acc_uuid_pin"], "platform_configurations": { "youtube": { "title": "Demo", "privacy_status": "public", "category_id": 22 }, "pinterest": { "board_id": "board_uuid", "title": "Pin title", "link": "https://x.com" }, "tiktok": { "privacy_level": "PUBLIC_TO_EVERYONE", "disable_comment": false, "disable_duet": false, "disable_stitch": false }, "x": { "community_id": "1234567890", "tagged_user_handles": ["user1"] }, "instagram": { "stickers": [{ "type": "link", "url": "https://x.com" }] } } } Caption limits per platform: Instagram 2200, Facebook 63206, X 280, LinkedIn 3000, YouTube 5000, TikTok 2200, Threads 500, Pinterest 500, Bluesky 300. ================================================================================ # Webhooks ================================================================================ Configure at /dashboard/webhooks. Eight event types: post.published, post.scheduled, post.failed, post.deleted, account.connected, account.disconnected, analytics.synced, queue.executed Each delivery is signed with HMAC-SHA256. Header: X-PostRoutine-Signature: t=,v1= signature = HMAC_SHA256(secret, t + "." + raw_body) Failed deliveries (non-2xx) retry up to 5 times with exponential backoff over ~24h. ================================================================================ # MCP Server ================================================================================ Prefer markdown docs: https://www.postroutine.io/docs/mcp-introduction.md Human SPA: https://www.postroutine.io/developers/mcp Endpoint: https://www.postroutine.io/api/mcp (Legacy Supabase URL still proxies in some setups; prefer the branded host.) 73 tools across Accounts, Brands, Posts, Analytics, Media, Queues, Inbox, Growth, Ads, and Platforms. Agent bootstrap: https://www.postroutine.io/AGENTS.md CLI markdown: https://www.postroutine.io/docs/cli-introduction.md Examples: accounts_list, accounts_health, brands_list, posts_list, posts_create, posts_publish_now, posts_retry, analytics_list, analytics_sync, media_generate_upload_link, queues_get_next_slot, inbox_comment_reply, ads_boost_post Universal MCP config (works in Claude Desktop, Cursor, Windsurf, Continue, Zed): { "mcpServers": { "postroutine": { "url": "https://www.postroutine.io/api/mcp", "headers": { "Authorization": "Bearer pr_YOUR_KEY" } } } } Cursor short guide: https://www.postroutine.io/cursor Codex: export POSTROUTINE_API_KEY then codex mcp add postroutine --url https://www.postroutine.io/api/mcp --bearer-token-env-var POSTROUTINE_API_KEY Claude.ai custom connector: URL https://www.postroutine.io/api/mcp (OAuth Client ID empty → paste key) For raw HTTP, POST JSON-RPC 2.0 with headers: Authorization: Bearer pr_YOUR_KEY Content-Type: application/json Accept: application/json, text/event-stream ================================================================================ # CLI (curl-first) ================================================================================ Prefer markdown: https://www.postroutine.io/docs/cli-introduction.md Human SPA: https://www.postroutine.io/developers/cli No npm install required for day-to-day use — call the REST API with curl or PowerShell. Optional Node script lives in the repo only (not published to npm). For agents, prefer MCP over a local CLI package. ================================================================================ # Errors ================================================================================ Errors are JSON: { "error": "message" } 400 Bad Request Invalid or missing parameters 401 Unauthorized Missing / invalid / expired API key 403 Forbidden Insufficient scope or brand access 404 Not Found Resource doesn't exist 422 Unprocessable Platform validation failed (e.g. caption too long) 429 Too Many Requests Rate limit exceeded 500 Internal Retry with exponential backoff ================================================================================ # Timestamps ================================================================================ All timestamps are UTC ISO 8601, e.g. 2026-04-20T15:00:00.000Z. The API does not accept timezone offsets — convert to UTC before sending.