When to use it
- You already have video files and just need distribution — this is the post-only endpoint without generation.
- Bulk-uploading a library of pre-produced content.
- Recurring scheduled distribution (daily/weekly digests, news broadcasts, etc.).
- Building a Buffer/Hootsuite alternative as a feature inside your own product.
To generate and post in one call, use Generate & Post instead.
Endpoints
POST /api/v1/post— Post a video to one or more platforms immediatelyPOST /api/v1/schedules— Create a recurring schedule (daily/weekly/cron)GET /api/v1/schedules— List your schedulesDELETE /api/v1/schedules/{schedule_id}— Cancel a scheduleGET /api/v1/social-accounts— List linked accounts + token freshness
Prerequisites
Before posting, your end-user must connect their social accounts via OAuth. Connections live in the dashboard at /dashboard/v5/social-accounts.
For multi-tenant integrations (you posting on behalf of your users), use the user-impersonation flow:
- Send your user to
https://reelsbuilder.ai/social/connect?platform=tiktok&return_url=... - They authorize once.
- Their
user_idshows inGET /api/v1/social-accounts. - Pass
target_user_idin your post requests to attribute the post to them.
Quickstart — post immediately
curl -X POST https://api.reelsbuilder.ai/api/v1/post \
-H "Authorization: Bearer $REELSBUILDER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://your-cdn.example.com/clip.mp4",
"platforms": ["tiktok", "instagram", "youtube_shorts"],
"caption": "Why we ship 10x faster than competitors",
"hashtags": ["#startup", "#engineering"],
"webhook_url": "https://your-app.example.com/webhooks/post"
}'Initial response
{
"success": true,
"data": {
"job_id": "pjob_01HKZ...",
"status": "queued",
"platforms": [
{ "platform": "tiktok", "status": "queued" },
{ "platform": "instagram", "status": "queued" },
{ "platform": "youtube_shorts", "status": "queued" }
]
},
"meta": { "request_id": "req_...", "credits_used": 3, "credits_remaining": 997 }
}Parameters
| Field | Type | Required | Description |
|---|---|---|---|
video_url | URL | yes | Public HTTPS URL to the video. mp4, mov, webm. Max 287MB (TikTok limit). |
platforms | string[] | yes | 1-5 of tiktok, instagram, youtube_shorts, facebook_reels, x. |
caption | string | no | Post caption. Per-platform character limits enforced (TikTok 2200, IG 2200, YouTube 5000, FB 5000, X 280). |
hashtags | string[] | no | Hashtags including #. Appended to caption. |
title | string | no | YouTube + Facebook title. Falls back to first line of caption if omitted. |
schedule_at | ISO8601 | no | Future timestamp to delay posting. Max 30 days out. |
target_user_id | string | no | For multi-tenant: post on behalf of a different user than the API-key owner. |
thumbnail_url | URL | no | Custom thumbnail for YouTube Shorts. Auto-generated from first frame if omitted. |
webhook_url | URL | recommended | HTTPS URL for completion callback. |
Completion webhook
{
"event_type": "post.completed",
"data": {
"job_id": "pjob_01HKZ...",
"status": "partial_success",
"platforms": [
{
"platform": "tiktok",
"status": "posted",
"external_id": "7234...",
"external_url": "https://tiktok.com/@.../video/7234..."
},
{
"platform": "instagram",
"status": "posted",
"external_id": "...",
"external_url": "https://instagram.com/reel/..."
},
{
"platform": "youtube_shorts",
"status": "failed",
"error_code": "PLATFORM_OAUTH_EXPIRED",
"error_message": "YouTube token expired. User must reconnect."
}
]
}
}Recurring schedules
For repeat distribution (daily news, weekly digests, content calendars), create a schedule once:
curl -X POST https://api.reelsbuilder.ai/api/v1/schedules \
-H "Authorization: Bearer $REELSBUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Daily news broadcast",
"cadence": "daily",
"time_local": "09:00",
"timezone": "America/New_York",
"platforms": ["tiktok", "instagram"],
"source": {
"type": "generate_and_post",
"topic_strategy": "trending_news",
"brand_id": "brn_01HKZ..."
}
}'Cadence options: daily, weekly, cron (with cron_expression field). Each firing creates one job; webhook fires on completion.
Examples
TypeScript — bulk-post from a library
const auth = { Authorization: `Bearer ${process.env.REELSBUILDER_API_KEY}` };
const videos = [
{ url: "https://cdn.example.com/v1.mp4", caption: "Episode 1: ..." },
{ url: "https://cdn.example.com/v2.mp4", caption: "Episode 2: ..." },
{ url: "https://cdn.example.com/v3.mp4", caption: "Episode 3: ..." },
];
// Post all 3 in parallel; idempotency keys make this safe to retry
await Promise.all(
videos.map((v, i) =>
fetch("https://api.reelsbuilder.ai/api/v1/post", {
method: "POST",
headers: {
...auth,
"Content-Type": "application/json",
"Idempotency-Key": `bulk-2026-05-15-${i}`,
},
body: JSON.stringify({
video_url: v.url,
platforms: ["tiktok", "instagram"],
caption: v.caption,
schedule_at: new Date(Date.now() + i * 3600_000).toISOString(),
}),
}),
),
);Pricing
- 1 credit per platform per post.
- 3-platform fan-out = 3 credits.
- No charge for video storage (use your own CDN).
- Scheduling itself is free — only the firing costs credits.
- Per-platform failures are not refunded. Each attempt to post counts whether it succeeded or not.
Platform-specific limits
| Platform | Video size | Duration | Caption | Notes |
|---|---|---|---|---|
| TikTok | 287MB | 3s-10min | 2200 | 9:16 strongly preferred |
| Instagram Reels | 4GB | 3s-90s | 2200 | 9:16 required |
| YouTube Shorts | 256GB | 1s-60s | 5000 | 9:16, vertical |
| Facebook Reels | 4GB | 3s-90s | 5000 | 9:16 preferred |
| X (Twitter) | 512MB | 0.5s-140s | 280 | 16:9 or 1:1 preferred |
ReelsBuilder validates these on submission and rejects with INPUT_INVALID_FORMAT before charging credits.
OAuth token security
All social tokens are encrypted at rest with AES-256-CBC using user-specific PBKDF2-derived keys (100k iterations, SHA-256). Tokens are never returned over the API — connection status is exposed as a boolean. To rotate or revoke, the end-user must use the dashboard.
See also
- Generate & Post API — generates the video for you
- YouTube Clipper — feeds this endpoint with sliced shorts
- Webhooks — signature verification + retry policy