Posts

Publish to YouTube

Upload a YouTube video or Short from a URL or base64.

POSThttps://app.tryadeli.com/api/v1/posts
AuthorizationBearer <API key>How keys work

YouTube takes one video per post. There is no separate Shorts endpoint: a vertical or square video up to three minutes long becomes a Short. Send application/json with a public HTTPS video.url (Adeli downloads it, up to 1 GB) or base64, or upload the file itself with multipart.

Uploads are private until Adeli passes YouTube's audit

YouTube locks every video uploaded through an app to private until that app passes the YouTube API Services audit. Until Adeli does, ask for any visibility you like: the response reports what YouTube actually applied in appliedPrivacy, and privacyRestricted is true when that is not what you asked for. Change the visibility in YouTube Studio afterwards.

Body

platform"youtube"Required
accountIduuidRequired
A connected YouTube channel in your organization.
profileIduuid
Optional, because accountId names its profile. If you pass both, they must agree.
titlestringRequired
1–100 characters, with no < or >.
privacy_status"public" | "unlisted" | "private"Required
Who can see the video. There is no default.
made_for_kidsbooleanRequired
Whether the video is made for kids, as YouTube requires under COPPA. This is the channel owner's own declaration: ask them, never guess.
videoobjectRequired
{ url }, a public HTTPS URL of up to 1 GB, or { content_type, base64 } with video/mp4, video/quicktime, or video/webm.
descriptionstring
Up to 5,000 bytes of UTF-8, with no < or >.
tagsstring[]
Up to 500 characters in total, counting the commas YouTube puts between them.
category_idstring
A numeric YouTube category id. Defaults to 22, People & Blogs.
contains_synthetic_mediaboolean
Discloses realistic altered or synthetic content.
publish_atstring
An ISO 8601 time in the future. Requires privacy_status: "private": YouTube makes the video public at that time.
notify_subscribersboolean
Defaults to true.

Returns 202 once YouTube has the file. Processing continues after; poll YouTube upload status with the publishId.

Fields

publishIdstring
The YouTube video id, the same as videoId. Pass it to the status endpoint.
appliedPrivacystring
The visibility YouTube applied. privacyRestricted is true when it is private but you asked for something else.
thumbnail"set" | "not_allowed" | "failed" | null
null when no thumbnail was sent; not_allowed when the channel cannot use custom thumbnails.
warningsobject[]
Present only when non-empty: privacy_restricted, thumbnail_not_allowed, or thumbnail_failed.