Posts
One endpoint publishes to every provider, but they behave differently enough to
be worth reading separately. Instagram publishes synchronously and returns
201, and so do X and Bluesky. TikTok and YouTube publish asynchronously and return 202 with an id you
poll.
Facebook does both, decided by the media: a photo or multi-photo post
returns 201 with the finished post, while a Reel or feed video returns 202.
Editing and deleting posts are deliberately not part of the public API in v1, except deleting an X post or a Bluesky post.
Endpoints
GETList posts
/api/v1/postsPosts from every account in a profile, newest first.POSTPublish to Instagram/api/v1/postsPublish an Instagram image or carousel.POSTPublish to Facebook/api/v1/postsPublish text, a link, photos, or a video to a Facebook Page.GETFacebook video status/api/v1/posts/facebook/statusCheck whether a Facebook Page video has finished publishing.GETTikTok creator info/api/v1/posts/tiktok/creator-infoWhat a TikTok creator currently allows, to read before a Direct Post.POSTPublish to TikTok/api/v1/postsPublish a TikTok video, photo, or carousel.GETTikTok publish status/api/v1/posts/tiktok/statusPoll a TikTok publish until it completes or fails.POSTPublish to YouTube/api/v1/postsUpload a YouTube video or Short from a URL or base64.POSTUpload YouTube file/api/v1/posts/youtubeUpload a YouTube video as a multipart file.GETYouTube upload status/api/v1/posts/youtube/statusPoll a YouTube upload until processing finishes.POSTPublish to X/api/v1/postsPublish an X post or thread, with text, media, or both.DELETEDelete X post/api/v1/posts/x/{postId}Delete a post from an X account.POSTPublish to Bluesky/api/v1/postsPublish a Bluesky post or thread, with up to four images or one video.DELETEDelete Bluesky post/api/v1/posts/bluesky/{postId}Delete a post from a Bluesky account.Media limits
Instagram image8 MiB- Decoded, per image. JPEG, PNG, and WebP in; normalized to JPEG.
Instagram carousel2–10 imagesFacebook photo4 MiB- Decoded, per photo — lower than Instagram's limit. Meta rejects anything larger.
Facebook multi-photo2–10 photosFacebook video (JSON)64 MiB- Decoded from base64, MP4 only. Use multipart for MOV or WebM.
TikTok video (JSON)64 MiB- Decoded from base64, MP4 only.
TikTok video (multipart or URL)1 GB- MP4, MOV, or WebM; 3 seconds up to the creator's maximum duration. Remote URLs must be public HTTPS, and are fetched with private-network, redirect, timeout, and size protections.
TikTok photo20 MB- Per photo, 1–35 per post, normalized to JPEG at 1080×1920. Remote photo URLs are not accepted.
YouTube video (URL)1 GB- MP4, MOV, or WebM from a public HTTPS URL.
YouTube video (multipart)4 GiB- MP4, MOV, or WebM, sent to
POST /api/v1/posts/youtube. YouTube thumbnail50 MB- JPEG or PNG; custom thumbnails need a verified channel.
X image5 MB- JPEG, PNG, or WebP, up to 4 per post. The file's bytes must match its content_type.
X GIF15 MB- One per post, alone.
X video512 MB- MP4 as base64 (within the 96 MiB body limit), or MP4 or MOV from a public HTTPS URL. One per post, alone.
Bluesky image20 MB in, 2 MB posted- JPEG, PNG, or WebP, up to 4 per post. Larger than 2 MB is resized to JPEG; a resized PNG loses transparency.
Bluesky video100 MB- MP4 as base64 or from a public HTTPS URL. One per post, alone. Bluesky's own length and daily limits apply, read from Bluesky at upload time.
JSON request body96 MiB- Beyond this the request is rejected with 413 before parsing.
Multipart request4 GiB- Total across all parts.
Errors
Beyond the shared codes in Errors:
unsupported_feature422- You sent
scheduled_date,add_to_queue, orasync_upload. Scheduling is deferred. invalid_post_settings422- The privacy, comment, duet, or stitch setting is not available to this creator right now, or branded content was requested without public visibility. Re-query creator info.
media_url_unverified422- TikTok has not verified this deployment's media URL prefix, which every TikTok post needs.
privacy_level_unsupported422- A TikTok video asked for a privacy level other than PUBLIC_TO_EVERYONE. Publish it publicly, or send it as a MEDIA_UPLOAD draft.
rate_limited429- TikTok is throttling the account. Retry later.
page_not_selected409- The Facebook connection exists but no Page has been chosen yet.
missing_permission403- The connection was authorized without a permission this action needs. Reconnect and approve it.
quota_exhausted429- YouTube's daily API quota, shared by every Adeli customer, is used up. The message says when it resets: midnight Pacific.
upload_limit_exceeded422- The YouTube channel has reached YouTube's own upload limit, or the Bluesky account has reached its daily video limit or has not verified its email. Try again later.
provider_rejected422- YouTube refused the video's metadata, such as an unknown category_id.
x_billing_required402- The workspace has no card on file, which X needs. See X API pricing.
duplicate_post409- X refused the post because the account published the same text recently.
invalid_media422- A Bluesky image is not valid base64, is not a JPEG, PNG, or WebP, or cannot be resized under 2 MB. Or an X media item is not valid base64, does not match its content_type, is over its size limit, or X could not process it.
temporarily_unavailable503- X is unavailable to Adeli for a while. Retry later.
unsupported_media_type415- Content-Type must be
application/jsonormultipart/form-data.