---
title: "Publish a post"
method: POST
path: "/api/v1/posts"
tags: ["Posts"]
---

# Publish a post

`POST /api/v1/posts`

## Request

- Base URL: `https://app.tryadeli.com`
- URL: `https://app.tryadeli.com/api/v1/posts`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/adeli/apis/adeli-api/docs/api/v1/posts/post.ts> (a function with typed inputs; its response is checked against the schema)

Publish to Instagram, Facebook, TikTok, YouTube, X, Bluesky, or LinkedIn. A LinkedIn post takes at most one of `image`, `images` (2–20 staged images), `video` (one staged MP4), or `document` (one staged PDF with a title), plus optional `mentions`. Instagram requests using only staged upload references are durably accepted with 202 and a status URL; legacy base64 or URL inputs remain synchronous during the compatibility window. Send `multipart/form-data` only for TikTok uploads on this shared endpoint.

## Request body

- union
  - object
    - `platform` 'instagram', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `caption` string
    - `collaborators` string[]
    - `isAiGenerated` boolean
    - `image` union, required
      - object
        - `contentType` 'image/jpeg' | 'image/png' | 'image/webp', required
        - `base64` string, required
        - `altText` string
        - `userTags` object[]
          - `username` string, required
          - `x` number, required
          - `y` number, required
      - object
        - `upload_id` string, required
        - `altText` string
        - `userTags` object[]
          - `username` string, required
          - `x` number, required
          - `y` number, required
  - object
    - `platform` 'instagram', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `caption` string
    - `collaborators` string[]
    - `isAiGenerated` boolean
    - `images` union[], required
      - union
        - object
          - `contentType` 'image/jpeg' | 'image/png' | 'image/webp', required
          - `base64` string, required
          - `altText` string
          - `userTags` object[]
            - `username` string, required
            - `x` number, required
            - `y` number, required
        - object
          - `upload_id` string, required
          - `altText` string
          - `userTags` object[]
            - `username` string, required
            - `x` number, required
            - `y` number, required
  - object
    - `platform` 'instagram', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `caption` string
    - `collaborators` string[]
    - `isAiGenerated` boolean
    - `reel` union, required
      - object
        - `contentType` 'video/mp4', required
        - `base64` string, required
        - `userTags` object[]
          - `username` string, required
        - `thumbOffsetMs` integer
      - object
        - `url` string, uri, required
        - `userTags` object[]
          - `username` string, required
        - `thumbOffsetMs` integer
      - object
        - `upload_id` string, required
        - `userTags` object[]
          - `username` string, required
        - `thumbOffsetMs` integer
    - `shareToFeed` boolean
  - object
    - `platform` 'instagram', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `story` union, required
      - object
        - `contentType` 'image/jpeg' | 'image/png' | 'image/webp', required
        - `base64` string, required
        - `userTags` object[]
          - `username` string, required
          - `x` number
          - `y` number
      - object
        - `contentType` 'video/mp4', required
        - `base64` string, required
        - `userTags` object[]
          - `username` string, required
          - `x` number
          - `y` number
      - object
        - `url` string, uri, required
        - `userTags` object[]
          - `username` string, required
          - `x` number
          - `y` number
      - object
        - `upload_id` string, required
        - `userTags` object[]
          - `username` string, required
          - `x` number
          - `y` number
    - `isAiGenerated` boolean
  - object
    - `platform` 'instagram', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `caption` string
    - `collaborators` string[]
    - `isAiGenerated` boolean
    - `carousel` union[], required
      - union
        - object
          - `contentType` 'image/jpeg' | 'image/png' | 'image/webp', required
          - `base64` string, required
          - `altText` string
          - `userTags` object[]
            - `username` string, required
            - `x` number, required
            - `y` number, required
        - object
          - `upload_id` string, required
          - `altText` string
          - `userTags` object[]
            - `username` string, required
            - `x` number, required
            - `y` number, required
        - object
          - `contentType` 'video/mp4', required
          - `base64` string, required
          - `userTags` object[]
            - `username` string, required
          - `thumbOffsetMs` integer
        - object
          - `url` string, uri, required
          - `userTags` object[]
            - `username` string, required
          - `thumbOffsetMs` integer
        - object
          - `upload_id` string, required
          - `userTags` object[]
            - `username` string, required
          - `thumbOffsetMs` integer
  - object
    - `platform` 'facebook', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `message` string
    - `image` union, required
      - object
        - `contentType` 'image/jpeg' | 'image/png' | 'image/webp', required
        - `base64` string, required
      - object
        - `upload_id` string, required
  - object
    - `platform` 'facebook', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `message` string
    - `images` union[], required
      - union
        - object
          - `contentType` 'image/jpeg' | 'image/png' | 'image/webp', required
          - `base64` string, required
        - object
          - `upload_id` string, required
  - object
    - `platform` 'facebook', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `message` string
    - `reel` union, required
      - object
        - `contentType` 'video/mp4', required
        - `base64` string, required
      - object
        - `upload_id` string, required
  - object
    - `platform` 'facebook', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `message` string
    - `video` union, required
      - object
        - `contentType` 'video/mp4', required
        - `base64` string, required
      - object
        - `upload_id` string, required
    - `title` string
  - object
    - `platform` 'tiktok', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `post_mode` 'DIRECT_POST' | 'MEDIA_UPLOAD'
    - `tiktok_title` string
    - `tiktok_description` string
    - `privacy_level` 'PUBLIC_TO_EVERYONE' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR' | 'SELF_ONLY'
    - `disable_comment` boolean
    - `disable_duet` boolean
    - `disable_stitch` boolean
    - `cover_timestamp` integer
    - `photo_cover_index` integer
    - `auto_add_music` boolean
    - `is_aigc` boolean
    - `brand_content_toggle` boolean
    - `brand_organic_toggle` boolean
    - `music_usage_confirmed` true, required
    - `remove_editor_attribution` boolean
    - `video` union
      - object
        - `content_type` 'video/mp4', required
        - `base64` string, required
      - object
        - `url` string, uri, required
      - object
        - `upload_id` string, required
    - `photos` union[]
      - union
        - object
          - `content_type` 'image/jpeg' | 'image/png' | 'image/webp', required
          - `base64` string, required
        - object
          - `upload_id` string, required
  - object
    - `platform` 'youtube', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `title` string, required
    - `description` string
    - `tags` string[]
    - `category_id` string
    - `privacy_status` 'public' | 'unlisted' | 'private', required
    - `made_for_kids` boolean, required
    - `contains_synthetic_media` boolean
    - `publish_at` string, date-time
    - `notify_subscribers` boolean
    - `video` union, required
      - object
        - `url` string, uri, required
      - object
        - `content_type` 'video/mp4' | 'video/quicktime' | 'video/webm', required
        - `base64` string, required
      - object
        - `upload_id` string, required
    - `thumbnail` object
      - `upload_id` string, required
  - object
    - `platform` 'x', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `text` string, required
    - `media` union[]
      - union
        - object
          - `content_type` 'image/jpeg' | 'image/png' | 'image/webp' | 'image/gif' | 'video/mp4', required
          - `base64` string, required
        - object
          - `url` string, uri, required
        - object
          - `upload_id` string, required
    - `thread` object[]
      - `text` string, required
      - `media` union[]
        - union
          - object
            - `content_type` 'image/jpeg' | 'image/png' | 'image/webp' | 'image/gif' | 'video/mp4', required
            - `base64` string, required
          - object
            - `url` string, uri, required
          - object
            - `upload_id` string, required
  - object
    - `platform` 'bluesky', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `text` string, required
    - `images` union[]
      - union
        - object
          - `content_type` 'image/jpeg' | 'image/png' | 'image/webp', required
          - `base64` string, required
          - `altText` string
        - object
          - `upload_id` string, required
          - `altText` string
    - `video` union
      - object
        - `content_type` 'video/mp4', required
        - `base64` string, required
        - `altText` string
      - object
        - `url` string, uri, required
        - `altText` string
      - object
        - `upload_id` string, required
        - `altText` string
    - `langs` string[]
    - `thread` object[]
      - `text` string, required
      - `images` union[]
        - union
          - object
            - `content_type` 'image/jpeg' | 'image/png' | 'image/webp', required
            - `base64` string, required
            - `altText` string
          - object
            - `upload_id` string, required
            - `altText` string
      - `video` union
        - object
          - `content_type` 'video/mp4', required
          - `base64` string, required
          - `altText` string
        - object
          - `url` string, uri, required
          - `altText` string
        - object
          - `upload_id` string, required
          - `altText` string
  - object
    - `platform` 'linkedin', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid
    - `commentary` string, required
    - `mentions` object[]
      - `urn` string, required
      - `name` string, required
      - `offset` integer, required
    - `image` union
      - object
        - `content_type` 'image/jpeg' | 'image/png' | 'image/gif', required
        - `base64` string, required
        - `title` string
      - object
        - `upload_id` string, required
        - `title` string
    - `images` object[]
      - `upload_id` string, required
      - `alt_text` string
    - `video` object
      - `upload_id` string, required
      - `title` string
    - `document` object
      - `upload_id` string, required
      - `title` string, required

## Response `201`

Success

- union
  - object
    - `id` string, required
    - `platform` 'instagram' | 'tiktok' | 'facebook' | 'youtube' | 'x' | 'bluesky' | 'linkedin', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid, required
    - `providerId` string, required
    - `caption` string, nullable, required
    - `media` object[], required
      - `type` string, required
      - `url` string, nullable, required
      - `thumbnailUrl` string, nullable, required
    - `permalink` string, nullable, required
    - `engagement` object, required
      - `likes` number, nullable, required
      - `comments` number, nullable, required
      - `shares` number, nullable
      - `views` number, nullable
      - `reach` number, nullable
    - `publishedAt` string, date-time, nullable, required
    - `warnings` object[]
      - `code` string, required
      - `message` string, required
    - `resizedImages` object[]
      - `index` integer, required
      - `image` integer, required
  - object
    - `id` string, required
    - `status` 'published' | 'partial', required
    - `platform` 'x' | 'bluesky', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid, required
    - `providerId` string, required
    - `permalink` string, uri, required
    - `posts` union[], required
      - union
        - object
          - `index` integer, required
          - `status` 'published', required
          - `providerId` string, required
          - `url` string, uri, required
        - object
          - `index` integer, required
          - `status` 'failed' | 'not_attempted', required
          - `error` object
            - `code` string, required
            - `message` string, required
    - `resizedImages` object[]
      - `index` integer, required
      - `image` integer, required

## Other responses

- `202`: Success
- `207`: Success
- `400`: Invalid request or provider failure
- `401`: Missing or invalid API key
- `402`: Billing is required: a card is needed to connect more accounts or use X (`billing_required`, `x_billing_required`), or the workspace has used its free monthly allowance (`usage_limit_reached`)
- `403`: The connection lacks a permission or provider-confirmed resource
- `409`: The request conflicts with existing state
- `413`: Uploaded media is too large
- `415`: Unsupported media type
- `422`: The connected account cannot perform this operation
- `429`: Provider quota or rate limit exhausted
- `502`: Invalid request or provider failure
- `503`: The platform is temporarily unavailable

---

[API](https://skmtc.dev/adeli/apis/adeli-api.md) - [All operations](https://skmtc.dev/adeli/apis/adeli-api/llms.txt) - [OpenAPI document](https://skmtc.dev/adeli/apis/adeli-api/revisions/ed680dfa9033?raw)
