Reeling publishing API reference
Use the Reeling REST API at https://api.reeling.app/api/v1 to discover projects and channels, submit reviewed video requests and check per-destination delivery results.
Reviewed 2026-10-20 ยท Reeling product team
Authenticate with a header
Provide X-API-Key or Authorization: Bearer in your request headers. Create and revoke keys in your Reeling account. Account and plan eligibility apply. Keep keys in an environment variable or secret manager; do not put them in URLs, GitHub examples or screenshots.
Start with project discovery. The example below makes one account read; its output can contain private project identifiers and names.
curl --fail-with-body \
-H "X-API-Key: $REELING_API_KEY" \
https://api.reeling.app/api/v1/projectsSelect a project and channel
GET /projects returns projects owned by the authenticated account. Pass a projectId query parameter to GET /channels. Choose the correct channel ID from that project, and inspect GET /channels/{id}/options where the provider exposes choices.
The runnable account example requires explicit project selection for multi-project accounts. It emits platform/capability summaries and omits private names and IDs from its report. This reduces accidental disclosure when sharing a connection check.
node examples/read-account.mjs
node --env-file=.env examples/read-account.mjs --live-readReview a publishing request
POST /publish accepts a video URL or multipart video upload. Include project_id, channel_ids and platforms explicitly. The example uses private YouTube visibility and a future timestamp with a timezone. The media URL and UUIDs are placeholders, not a runnable upload.
The scheduling script validates the date and identifiers, displays a local request draft first, and only sends when you pass --publish. A real submission can consume plan allowance. Retain its post_id and original request context.
{
"project_id": "YOUR_PROJECT_UUID",
"channel_ids": [
"YOUR_CHANNEL_UUID"
],
"platforms": [
"youtube"
],
"video_url": "https://example.com/owned-video.mp4",
"title": "A useful workflow",
"caption": "A short demonstration.",
"youtube": {
"privacy_status": "private",
"made_for_kids": false
},
"scheduled_for": "2026-12-01T15:00:00Z"
}Follow the post through delivery
GET /posts/{id} returns a top-level status and publish_results for individual destinations. Check published, upload_status, url and error. A success flag on the request or upload can precede final publication. TikTok inbox delivery requires a separate action in the TikTok app.
Use bounded polling, back off for rate limits and save the existing post ID. An expired observation window is an unknown result, not permission to upload the same content again.
node examples/poll-status.mjs
node --env-file=.env examples/poll-status.mjs --live-readRead analytics with their definitions
GET /analytics/overview accepts projectId and optional startDate/endDate filters. Missing provider metrics remain unavailable; they should not silently become measured zeroes. Provider definitions and available permissions differ.
The example reads the stored overview. It does not request a metric synchronization or claim that platform views are website visits. Keep the returned account analytics private.
Try it with your own workflow
Start with the offline examples, check the intended account and choose the next action deliberately.
Open the runnable examplesCreate a Reeling workspace