Start
Prerequisites
Plan details are on pricing. Then log in at /app and connect the accounts for the brand. The API does not log you into Instagram or YouTube by itself.
Open Company API, name a key, and copy it once. The Send does not store the plaintext key after you leave the create screen. You can hold up to 5 keys per account and revoke them from /app. A key is pinned to the brand you created it on, unless you are the operator.
Checked 2026-10-29. These steps match the public API docs.
Auth
Auth
Authorization: Bearer tsk_your_key # or X-Api-Key: tsk_your_key
60 requests per minute per key. Failed guesses from the same IP are throttled. HTTPS only in production. Posting endpoints reject missing, fake, revoked, and unpaid keys.
Upload
Upload
POST /api/v1/media uploads an MP4 or JPG, or you pass a public https URL. POST /api/v1/posts creates a short from a file, a mediaId, or a mediaUrl. Video max is 200 MB. A public media URL must be https on a public host.
curl https://getthesend.com/api/v1/posts \ -H "Authorization: Bearer tsk_YOUR_KEY" \ -F "[email protected]" \ -F "title=Studio walkthrough" \ -F "text=One file, a caption for each network." \ -F "channels=instagram,tiktok,facebook,youtube" \ -F "scheduledAt=2026-08-25T14:00:00Z"
curl https://getthesend.com/api/v1/posts \
-H "Authorization: Bearer tsk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"mediaUrl": "https://cdn.example.com/short.mp4",
"text": "One file, a caption for each network.",
"channels": ["instagram", "tiktok"],
"send": true
}'Networks
Per-network options
The channels field names the networks for that post. The eight networks are instagram, facebook, tiktok, youtube, x, linkedin, threads, and pinterest. Pass send true to publish immediately. Otherwise the post sits in the queue until you send or until the scheduler hits scheduledAt. Unique titles, captions, and hashtags still run per network when copy is enabled.
GET /api/v1/channels shows which networks are connected. The full endpoint list is on the API docs.
| Method | Path | What it does |
|---|---|---|
| GET | /api/v1 | Discovery (no auth) |
| GET | /api/v1/account | Plan, brand, connected channels |
| GET | /api/v1/channels | Which networks are connected |
| POST | /api/v1/media | Upload MP4/JPG, or pass a public https URL |
| GET | /api/v1/posts | List queue / calendar items |
| POST | /api/v1/posts | Create a short (file, mediaId, or mediaUrl) |
| GET | /api/v1/posts/:id | One post |
| PATCH | /api/v1/posts/:id | Edit title, text, channels, schedule |
| DELETE | /api/v1/posts/:id | Remove it |
| POST | /api/v1/posts/:id/send | Publish now to connected channels |
Status
Status and errors
Read one post with GET /api/v1/posts/:id.
When an in-memory Send now job is already running for that post, POST /api/v1/posts/:id/send returns HTTP 200 with ok true, the current post (status sending), and skipped as an empty list. That JSON does not include alreadyRunning, jobId, results, or error. The MCP send_post tool returns ok true and that post. alreadyRunning is not in the tool result.
A second v1 send while a direct send holds the file lock, and that post is not in the in-memory job set, returns HTTP 400 with ok false and error "send already in progress". alreadyRunning is not in that body. The MCP send_post tool then returns ok false and error "send already in progress". alreadyRunning is not in the tool result.
Specs
Network specs
- TikTok video specs
- Instagram Reels specs
- YouTube Shorts specs
- Facebook Reels specs
- X video specs
- LinkedIn video specs
- Threads and Pinterest video specs
- Video specs cheat sheet
Plan details are on pricing.
