Your posts, by API.
Scoped keys, dry runs, scheduling and signed webhooks, for the scripts and tools that need to publish for you. A key can only do what its owner granted, and a dry run shows what would go out before anything does.
Free has no API keys you create yourself. Creator 2, Pro 5, Business 10.
The short answer
Three calls, one safe post.
Real request and response shapes. List your accounts, dry run a Reel, then poll the job.
1. List your accounts
Scope accounts:read, part of the default key.
curl https://app.blendin.ai/api/v1/accounts \
-H "Authorization: Bearer bln_live_YOUR_KEY"{ "accounts": [ {
"id": "uuid",
"platform": "instagram",
"username": "marta.clay",
"display_name": "Marta Clay Studio",
"connection": "native",
"sign_in": "unified",
"can_publish": true,
"needs_reconnect": false,
"daily_post_limit": 3
} ] }2. Dry run a Reel
Scope publish. A dry run checks everything and publishes nothing.
curl -X POST https://app.blendin.ai/api/v1/publish \
-H "Authorization: Bearer bln_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/reel.mp4",
"caption": "Wheel day, three bowls",
"account": "@marta.clay",
"dry_run": true,
"idempotency_key": "reel-001"
}'{ "job": { ... },
"poll": "/api/v1/publish/<id>",
"replayed": false }3. Poll the job
Every 5 to 10 seconds. container_ready is where a dry run ends.
curl https://app.blendin.ai/api/v1/publish/<id> \
-H "Authorization: Bearer bln_live_YOUR_KEY"{ "job": {
"id": "uuid",
"status": "container_ready",
"platform": "instagram",
"account_id": "uuid",
"dry_run": true,
"error": null,
"created_at": "...",
"finished_at": "..."
} }Keys that ask for only what they need.
| What does a key look like? | bln_live_ followed by random characters. Send it as Authorization: Bearer or in an X-API-Key header. |
|---|---|
| How is it stored? | Only its sha256 is stored. The key itself is shown once, when you mint it. |
| Who can mint one? | Only the workspace owner, from a signed in session in the app. Never with another key. |
| Can I revoke a key? | Yes, at any time. A revoked, expired or unknown key all answer the same 401. |
| What is the rate limit? | 120 requests a minute per account, shared by every key and every MCP connection. |
| What do errors look like? | Always an error object with a code and a message, never a stack trace. |
| Default: publish, accounts:read | Publish and schedule, uploads, cancel, and list your connected accounts. A key with no scopes gets exactly these two. |
|---|---|
| library:read and library:write | List posts, read one, see the calendar, edit a caption or a first comment. |
| analytics:read | Per post engagement with totals, account insights and top posts. A post still collecting data returns its status and empty metrics, never a zero. |
| comments:read and comments:write | Read comments on Instagram accounts connected with Instagram Business and post a public reply, exactly the text you send. |
| inbox:read and inbox:write | Read DM conversations and reply inside the 24 hour window. Needs the DM Inbox, which is rolling out. |
| brand_kits:read and brand_kits:write | Read brand kits and edit style fields. A colour a brand does not have is null. |
| generate | Start a generation and poll it. It uses your plan allowance. |
| lead_flows, link_in_bio, webhooks | Each has its own read and write permission. |
| Free | Creator | Pro | Business | |
|---|---|---|---|---|
| API keys you create yourself | 0 | 2 | 5 | 10 |
| Webhook endpoints | 0 | 1 | 5 | 20 |
| Webhook events | None | post.published, post.failed, webhook.test | All events | All events |
What each route does.
| POST /api/v1/publish | Publish or schedule a video to Instagram, LinkedIn, Facebook, Threads or YouTube. Supports dry runs, scheduled_at, idempotency keys, Reels covers, trial reels and collaborators. Scope publish. |
|---|---|
| GET /api/v1/publish/<id> | Read a job. Cancel a scheduled one with DELETE on the same path. Scope publish. |
| POST /api/v1/uploads | Get a signed upload URL for a video or a Reel cover, so large files go straight to storage. |
| GET /api/v1/accounts | Your connected accounts and whether each can publish or needs reconnecting. Scope accounts:read. |
| GET /api/v1/me | Your plan, plan allowance left for generation, accounts connected, brand kits and the key's scopes. |
| GET /api/v1/posts | The library, newest first, plus a route to read one post and to edit its caption. Scope library:read. |
| POST /api/v1/posts/<id>/publish | Publish or schedule an existing post to LinkedIn, Instagram, Facebook, Threads or TikTok, with a dry run first. |
| POST /api/v1/posts/<id>/reschedule | Move a scheduled post. Its accounts stay. |
| GET /api/v1/scheduled | Scheduled posts and API video jobs for a date range. |
| POST /api/v1/uploads/import | Give Blendin a public URL and it downloads the video or image for you. |
| POST /api/v1/media/publish | Publish a video, an image or a carousel by URL. It also reaches TikTok through an imported post, with per post consent. |
Anything that creates content, like generate, runs the app's own route as the key owner, so plan gates and your plan allowance stay in one place. The full reference lives under Developers in the app, with a Copy as Markdown for LLM button.
Signed webhooks, retried.
HMAC-SHA256 signed
Each delivery carries a Blendin-Signature header with a timestamp and a signature over the timestamp and the raw body, made with your endpoint's secret.
Retried on a schedule
A delivery that does not answer within 10 seconds is retried after 1 minute, 5 minutes, 30 minutes and 2 hours, with the same id each time so you can dedupe.
Disabled after 10 failures
An endpoint that fails 10 deliveries in a row is marked dead and stops receiving until you reactivate it.
Thirteen events
post.scheduled, post.published, post.failed, draft.created, brand_kit.updated, webhook.test, generation.completed, generation.failed, lead.captured, dm.received, comment.received, account.needs_reconnect and post.deleted.
What the API does not do
Start every new integration with a dry run: it is the cheapest way to see what Blendin would send.
Ask us anything.
What can the Blendin API do?
Publish and schedule to Instagram (Reels, Stories, covers, trial reels, collaborators), Facebook, Threads, LinkedIn and YouTube, upload media, list your accounts, read your library and calendar, reschedule and cancel, start a generation, and read analytics, comments and brand kits by permission. TikTok is reached through an imported post with per post consent.
How do I get an API key?
Mint one from the API keys tab under Developers in the app, signed in as the owner. The key is shown once and only its hash is stored. Keys start with bln_live_, are scoped and can be revoked at any time.
Which plans include API keys?
Free has none. Creator has 2, Pro 5 and Business 10. MCP over OAuth needs no key and works on every plan.
What is a dry run?
A request with dry_run set to true. Blendin checks the account and builds what it would send, then stops. Nothing is published. Run it first on every new integration.
Can I schedule posts through the API?
Yes. Send scheduled_at as an ISO 8601 time with a zone, between one minute and one year ahead. The job is stored as scheduled and runs within about five minutes of its time. You can cancel it while it is still scheduled.
How do I avoid posting twice?
Send an idempotency_key, or an Idempotency-Key header of up to 128 characters. A retry with the same key returns the same job and never creates a second post.
What are the rate limits?
120 requests a minute per account, shared by every key and every MCP connection of that account. Past that the API answers 429 with a Retry-After header.
Which webhook events are there?
post.scheduled, post.published, post.failed, draft.created, brand_kit.updated, webhook.test, generation.completed, generation.failed, lead.captured, dm.received, comment.received, account.needs_reconnect and post.deleted. Creator gets post.published, post.failed and webhook.test.
How are webhooks signed?
With HMAC-SHA256. Each delivery carries a Blendin-Signature header with a timestamp and a signature computed over the timestamp and the raw body with your endpoint's secret, which is shown once. Failed deliveries retry after 1 minute, 5 minutes, 30 minutes and 2 hours, and an endpoint that fails 10 deliveries in a row is disabled.
Can I generate content through the API?
Yes, for carousels, images, text posts and thread chains, with the generate permission. It runs the app's own generation route as the key owner, so plan gates and your plan allowance apply exactly as in the app, and an allowance that cannot cover it answers 402 before anything is made.
Make your first call.
Creator and up include API keys (2, 5, 10). On Free, connect an assistant over MCP instead.