Docs
YouTube

Posts

Upload videos to YouTube through the shared posts API.

Publish to a YouTube channel through POST /v1/posts with mediaKind: "video".

Cross-platform flow: Media guide.

Supported formats

mediaKindSupportedNotes
videoYesExactly one mediaUrls entry
text / image / multi-image / storiesNoUNSUPPORTED_MEDIA_KIND

Features

FeatureSupportedNotes
Thread / quoteNo
ScheduleYesscheduledFor + timezone
VisibilityYesDestination privacyStatus: public | unlisted | private
Remote deleteYesDELETE …/destinations/:id
TitleYesPost text (max 100 chars) → YouTube title
DescriptionYesDestination description → YouTube description

Title and description

FieldMaps to
text (or destinations[].text)YouTube title (truncated to 100 chars)
destinations[].descriptionYouTube description (max 5000)

If description is omitted, Onepostly falls back to using text as the description (legacy behavior).

description is YouTube-only. Sending it on a non-YouTube destination returns 400 with VALIDATION_ERROR.

Formatting

Both title and description are plain text. Onepostly does not parse Markdown or HTML.

InputBehavior
SpacesPreserved as sent
Newlines (\n in JSON)Preserved in the description (line breaks on YouTube)
Bold / Markdown / HTML (**bold**, <b>, etc.)Not rendered — sent as literal characters

In JSON, use a real newline escape ("Line one\nLine two"). A double-escaped \\n is stored as the two characters \ and n, not a line break.

Visibility

Set destinations[].privacyStatus when creating the post. Omitted values default to public.

ValueYouTube behavior
publicListed and searchable (default)
unlistedAnyone with the link; not listed in channel / search
privateOnly the channel owner (and accounts you share with)

privacyStatus is YouTube-only. Sending it on a non-YouTube destination returns 400 with VALIDATION_ERROR.

Unverified Google OAuth clients may still force uploads to private (locked) until app verification — even when you request public or unlisted.

Create

curl -X POST https://api.onepostly.com/v1/posts \
  -H "x-api-key: op_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Launch walkthrough #Shorts",
    "mediaKind": "video",
    "mediaUrls": ["https://cdn.example.com/clip.mp4"],
    "destinations": [
      {
        "connectionId": "YOUR_YOUTUBE_CONNECTION_ID",
        "privacyStatus": "unlisted",
        "description": "Full video description. Timestamps, links, and credits go here."
      }
    ]
  }'

Response: 202 with status: "queued". When published, externalPostId is the YouTube video id and externalUrl is https://www.youtube.com/watch?v=….

Shorts

Use a vertical 9:16 video under ~60 seconds. Including #Shorts in the title helps Shorts shelf classification (YouTube-side heuristic).

Limits

LimitValue
Onepostly publish cap256 MB
Quota per upload1,600 units

Remote delete

curl -X DELETE "https://api.onepostly.com/v1/posts/POST_ID/destinations/DEST_ID" \
  -H "x-api-key: op_YOUR_KEY"

See also