Skip to main content

Post through the platforms' APIs

Your own script receives each hand-over and posts every channel of it through that platform's own developer API: no posting service in between and nobody pressing a button. It takes the most work to build and keep running, and it gives you the most control over what goes out and how.

Receiving, checking the signature, answering and reporting back are the same for every receiver and are on Handed over by webhook. This page is what comes after the answer.

Before you start: each platform's own rules​

Every platform decides who may post through its API, and the rules are theirs, not Reelwire's. For each platform you post to, you will need a developer app registered with it, the account owner's permission for that app (usually through the platform's sign-in, giving you a token to store and renew), and often a review of your app before it may post in public. As of September 2026, these are the places to start; check each platform's developer documentation, because they change often:

platformWhere to look
instagramMeta's Instagram API, content publishing, for professional (business or creator) accounts. Instagram fetches the video itself from an address you give it, so the hand-over's video link can be passed on as it is.
facebookMeta's Graph API for Pages, which publishes Reels and videos to a Page you manage.
youtubeThe YouTube Data API's video upload, which takes the file itself, so download it first. Uploads count against a daily quota, and a project Google has not audited uploads as private.
tiktokTikTok's Content Posting API. Until TikTok has audited your app, what it posts is visible only to the account itself.
linkedinLinkedIn's Posts API, with the video uploaded first, for a member or an organisation page you manage.
telegramThe Telegram Bot API's video message, to a channel where your bot is an administrator.

A channel on No specific platform (download) names no platform: decide in your own mapping where its posts go, and pick the caption length that suits it from captions.

The shape of the script​

  1. Receive, check and answer as Handed over by webhook describes, and queue the work.
  2. Find the account. Map each channels[].channelId to the account and the stored token it posts to. The channelName is your own name for it, which is handy in logs; the id is what to key on.
  3. Take the text as it is. channels[].text is already written for that platform: the caption, the brand's line (disclaimer), the link (linkUrl, with linkLabel), the hashtags and, where the platform has one, the title. Join them the way the platform shows them; the caption was written short enough for the rest to fit. channels[].posting carries the channel's switches, such as visibility, allowComments or hashtagsAsFirstComment (post the hashtags as the first comment instead of in the caption).
  4. Send the video. channels[].media holds the clip (kind video) and its cover still (kind still), each with a signed url that works for seven days from each send. Pass the link where the API fetches it; otherwise download it, check it against sha256, and upload the file. Use the still where the API takes a cover.
  5. Report back for each channel: published with the post's url and the platform's own id as platformPostId, or failed with the platform's error as the reason, so a person can pick it up from Posts.

Changes and take-downs​

A later post.update carries a channel's new text and, where the video was replaced, a new video; post.delete asks for a post to be taken down. Both name the channel with the platformPostId and permalink you reported, so you can find the post again. Edit or delete it through the API where the platform allows it; where it does not (several do not let a published video be replaced), post the change as a new post or leave a task for a person, and report deleted once a post is gone.

Keep it running​

Tokens expire and permissions get withdrawn; a platform changes its API a few times a year. Report failed with the platform's own message whenever a post does not go out, rather than retrying for ever: the Posts screen then shows it, and somebody can post it by hand while you fix the script. Leaving Email on for a channel as well is a cheap safety net while the script is new.