API Documentation

Integrate QPost directly into your applications, scripts, and workflows.

1 Authentication

All API requests must be authenticated using an API Key. You can pass the key in the request headers.

Header NameValueDescription
x-api-keyYOUR_API_KEYPreferred method.
AuthorizationBearer YOUR_API_KEYAlternative standard bearer token method.

2 Create Post

POST/api/post

Request Body (FormData)

FieldTypeDescription
captionstringRequiredThe main text content of your post.
platformsJSON stringRequiredArray of target platforms. See structure below.
videoFileVideo file to upload. (Required if no images)
imagesFile[]One or more image files. (Required if no video)
titlestringOptional title (used for YouTube).
scheduledForISO DateOptional. If provided, post will be scheduled.
timezonestringTimezone for scheduling (default: "UTC").

Platforms Object Structure

The platforms field expects a JSON stringified array of objects with the following shape:

[
  {
    "platform": "YOUTUBE" | "TIKTOK" | "INSTAGRAM",
    "metadata": { ... } // Platform specific options
  }
]

Platform Metadata Details

YouTube Metadata

All fields are optional.

FieldTypeDescriptionDefault
descriptionstringOverride video description-
tagsstring[] | stringArray of strings or comma-separated string-
categoryIdstringYouTube Category ID"22"
embeddablebooleanAllow video to be embedded on other sitestrue
privacyStatus"private" | "unlisted" | "public"Video privacy setting"private"
publishAtstringISO datetime for YouTube's own scheduled publishing-
selfDeclaredMadeForKidsbooleanMark video as made for kidsfalse
TikTok Metadata

All fields are optional.

FieldTypeDescriptionDefault
privacyLevel"PUBLIC_TO_EVERYONE" | "MUTUAL_FOLLOW_FRIENDS" | "SELF_ONLY"Video privacy level"SELF_ONLY"
allowCommentbooleanAllow comments on the post-
allowDuetbooleanAllow other users to create duets-
allowStitchbooleanAllow other users to stitch with this video-
autoAddMusicbooleanAutomatically add background musictrue
videoCoverTimestampMsnumberTimestamp in milliseconds for video cover image1000
commercialContentEnabledbooleanMark content as promotional/commercialfalse
commercialContentSelectionsstring[] ("YOUR_BRAND" | "BRANDED_CONTENT")Commercial content disclosure options-
Instagram Metadata

All fields are optional. instagramBusinessAccountId is usually auto-detected from your linked Instagram account.

>
FieldTypeDescriptionDefault
instagramBusinessAccountIdstringInstagram Business Account IDauto-detected
mediaType"IMAGE" | "CAROUSEL" | "REELS" | "STORIES"Type of Instagram mediaauto-detected
mediaProductType"FEED" | "STORIES" | "REELS"Where the content will be posted-
disableCommentsbooleanDisable comments on the post-
locationIdstringInstagram Location ID to tag a location-
thumbOffsetnumberThumbnail offset for video posts (in milliseconds)-
userTagsobject[]Array of user tags: [{ username: string, x?: number, y?: number }]. Max 20 tags-
altTextstringCustom alt text for accessibility (max 1000 characters)-

Example Requests

curl -X POST https://yourdomain.com/api/post \
  -H "x-api-key: YOUR_API_KEY" \
  -F "caption=Check out this amazing content! #video" \
  -F 'platforms=[{"platform":"YOUTUBE","metadata":{"categoryId":"22","embeddable":true,"privacyStatus":"public","selfDeclaredMadeForKids":false}},{"platform":"TIKTOK","metadata":{"allowDuet":false,"allowStitch":false,"allowComment":false,"autoAddMusic":true,"privacyLevel":"PUBLIC_TO_EVERYONE","videoCoverTimestampMs":1000,"commercialContentEnabled":false,"commercialContentSelections":[]}}]' \
  -F "video=@/path/to/video.mp4" \
  -F "title=My Awesome Video"

3 Get Posts

GET/api/post

Query Parameters

ParameterTypeDescription
statusstringFilter by status: "DRAFT", "SCHEDULED", "POSTED", "FAILED".
platformstringFilter by platform: "YOUTUBE", "TIKTOK", "INSTAGRAM".
API Docs Terms of Service Privacy Policy
v1.0.0
Built for developers