---
title: "Create content"
method: POST
path: "/v1/workspaces/{workspaceId}/content"
tags: ["Content"]
---

# Create content

`POST /v1/workspaces/{workspaceId}/content`

## Request

- Base URL: `https://api.maevesocial.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.maevesocial.com/v1/workspaces/{workspaceId}/content`
- Auth: HTTP bearer

Create content as a draft, scheduled post, or explicit immediate publish. Omitted intent defaults to draft; use intent=schedule with scheduledAt or intent=publish_now to queue an immediate publish.

## Path parameters

- `workspaceId` string, uuid, required

## Headers

- `Idempotency-Key` string

## Request body

- CreatePublicPostDto
  - `integrationId` string, uuid, required
  - `intent` 'draft' | 'schedule' | 'publish_now': Create behavior. Omitted intent defaults to draft. Use schedule with scheduledAt, or publish_now for explicit immediate publishing.
  - `internalTitle` string, nullable: Internal planning title. Not sent to publishing providers.
  - `publishTitle` string, nullable: Provider-facing title for platforms that support or require one.
  - `notes` string: Free-form rich-text notes attached to the content (HTML). Not published — internal only.
  - `captions` CaptionsDto
    - `canonical` string, nullable
    - `overrides` CaptionOverridesDto
      - `x` string, nullable
      - `linkedin` string, nullable
      - `linkedin-page` string, nullable
      - `youtube` string, nullable
      - `instagram` string, nullable
      - `facebook` string, nullable
      - `threads` string, nullable
      - `tiktok` string, nullable
      - `pinterest` string, nullable
      - `google-business-profile` string, nullable
  - `contentMedia` PublicContentMediaDto[]: Canonical media relationship input. This is the only public media mutation shape. Accepts up to 20 items for linkedin and linkedin-page and 10 for every other platform.
    - `mediaId` string, uuid, required
    - `order` integer, nullable
    - `crops` object, nullable
    - `userTags` unknown[], nullable
      - unknown
    - `productTags` unknown[], nullable
      - unknown
    - `cover` object, nullable
  - `poll` LinkedInPollDto
    - `question` string, required
    - `options` LinkedInPollOptionDto[], required
      - `text` string, required
    - `duration` 'ONE_DAY' | 'THREE_DAYS' | 'SEVEN_DAYS' | 'FOURTEEN_DAYS', required
    - `voteSelectionType` 'SINGLE_VOTE', nullable
    - `isVoterVisibleToAuthor` boolean, nullable
  - `scheduledAt` string, nullable: Schedule at an ISO-8601 timestamp with timezone. Required only when intent is schedule.
  - `settings` PublicProviderSettingsDto
    - `mentions` PublicLinkedInMentionDto[], nullable: LinkedIn mentions of companies, schools or members in this edition's caption. Ranges must not overlap and must cover the caption this edition publishes.
      - `urn` string, required: urn:li:organization:<id> for a company or school, or urn:li:person:<id> for a member.
      - `displayName` string, required: The exact name LinkedIn returned. A name LinkedIn cannot match publishes as plain text.
      - `start` integer, required: Where "@" plus displayName starts in the caption, in UTF-16 code units.
      - `length` integer, required: The length of "@" plus displayName.
    - `collaborators` string[], nullable: Instagram collaborator usernames or IDs.
    - `locationId` string, nullable: Instagram or Threads location ID.
    - `trialReel` boolean, nullable: Whether to publish a single-video Instagram Reel as a trial reel.
    - `trialReelGraduationStrategy` 'manual' | 'automatic', nullable: Instagram trial Reel graduation strategy. Defaults to manual.
    - `audio_id` string, nullable: Instagram audio asset ID for Reels.
    - `audio_volume` number, nullable: Instagram Reel audio asset volume, from 0 to 100.
    - `video_volume` number, nullable: Original video audio volume for Instagram Reels, from 0 to 100.
    - `tiktok_music` object, nullable: Selected TikTok Commercial Music Library clip for direct Business video and photo posts. Validated strictly at publish time.
    - `facebookLinkUrl` string, nullable: Facebook Page feed link post URL.
    - `facebookCtaType` 'LEARN_MORE' | 'SIGN_UP' | 'DOWNLOAD' | 'WATCH_MORE' | 'BOOK_TRAVEL' | 'LISTEN_MUSIC' | 'USE_APP' | 'INSTALL_APP' | 'NO_BUTTON': Facebook Page feed link post CTA button type.
    - `facebookLocationId` string, nullable: Facebook Page location ID.
    - `xCommunityUrl` string, nullable: X community URL.
    - `topicTag` string, nullable: Threads topic tag.
    - `linkAttachment` string, nullable: Threads link attachment URL.
    - `replyControl` 'everyone' | 'accounts_you_follow' | 'mentioned_only' | 'parent_post_author_only' | 'followers_only': Threads reply control for who can reply to the root post.
    - `privacy_level` string, nullable: TikTok privacy level from creator info options.
    - `disable_comment` boolean, nullable: Disable TikTok comments.
    - `disable_duet` boolean, nullable: Disable TikTok duets for video posts.
    - `disable_stitch` boolean, nullable: Disable TikTok stitch for video posts.
    - `brand_content_toggle` boolean, nullable: Mark TikTok post as branded content.
    - `brand_organic_toggle` boolean, nullable: Mark TikTok post as brand organic content.
    - `is_aigc` boolean, nullable: Mark TikTok post as AI-generated content.
    - `tiktok_post_to_drafts` boolean, nullable: Send to TikTok drafts where supported.
    - `photo_cover_index` number, nullable: TikTok photo cover index.
    - `auto_add_music` boolean, nullable: Auto-add music for TikTok photo posts.
    - `privacyStatus` 'public' | 'unlisted' | 'private': YouTube privacy status.
    - `categoryId` string, nullable: YouTube video category ID.
    - `tags` string[], nullable: YouTube video tags.
    - `madeForKids` boolean, nullable: Whether the YouTube video is made for kids.
    - `notifySubscribers` boolean, nullable: Whether YouTube should notify subscribers.
    - `embeddable` boolean, nullable: Whether the YouTube video can be embedded.
    - `license` 'youtube' | 'creativeCommon': YouTube license.
    - `boardId` string, nullable: Pinterest board ID.
    - `link` string, nullable: Pinterest outbound link.
    - `altText` string, nullable: Pinterest media alt text.
    - `googlePostType` 'standard' | 'event' | 'offer': Google Business Profile Local Post type. Defaults to standard.
    - `googleCallToActionType` 'book' | 'order' | 'shop' | 'learn_more' | 'sign_up' | 'call': Google Business Profile CTA button type. Not supported on offer posts.
    - `googleCallToActionUrl` string, nullable: Google Business Profile CTA URL. Required for every CTA type except call.
    - `googleEventTitle` string, nullable: Google Business Profile event or offer title.
    - `googleEventStartAt` string, nullable: Google Business Profile event or offer start (ISO 8601 local timestamp).
    - `googleEventEndAt` string, nullable: Google Business Profile event or offer end (ISO 8601 local timestamp).
    - `googleOfferCouponCode` string, nullable: Google Business Profile offer coupon code.
    - `googleOfferRedeemOnlineUrl` string, nullable: Google Business Profile offer online redemption URL.
    - `googleOfferTerms` string, nullable: Google Business Profile offer terms and conditions.
    - `googleLanguageCode` string, nullable: Google Business Profile Local Post language code override (BCP-47).
  - `postType` 'post' | 'reel' | 'story' | 'thread' | 'poll'
  - `firstComment` string, nullable
  - `shareToFeed` boolean, nullable
  - `pillarIds` string[], nullable: Workspace content pillar IDs to attach to this content.
  - `formatIds` string[], nullable: Workspace content format IDs to attach to this content.
  - `campaignId` string, uuid, nullable
  - `campaignPhaseId` string, uuid, nullable
  - `labelIds` string[], nullable: Workspace label IDs to attach to this content.
  - `priority` 'urgent' | 'high' | 'medium' | 'low'
  - `assigneeIds` string[], nullable
  - `threadMessages` PublicContentThreadMessageDto[], nullable
    - `captions` CaptionsDto, required
      - `canonical` string, nullable
      - `overrides` CaptionOverridesDto
        - `x` string, nullable
        - `linkedin` string, nullable
        - `linkedin-page` string, nullable
        - `youtube` string, nullable
        - `instagram` string, nullable
        - `facebook` string, nullable
        - `threads` string, nullable
        - `tiktok` string, nullable
        - `pinterest` string, nullable
        - `google-business-profile` string, nullable
    - `contentMedia` PublicContentMediaDto[], nullable: Canonical media relationship input for this thread reply.
      - `mediaId` string, uuid, required
      - `order` integer, nullable
      - `crops` object, nullable
      - `userTags` unknown[], nullable
        - unknown
      - `productTags` unknown[], nullable
        - unknown
      - `cover` object, nullable

## Response `201`

Content created

- object
  - `data` PublicContentMutationResultDto, required
    - `id` string, uuid, required
    - `status` 'draft' | 'pending_approval' | 'rejected' | 'scheduled' | 'sent' | 'failed' | 'cancelled', required
    - `appUrl` string, uri: Authenticated Maeve app link for reviewing this content. Use this URL exactly as returned.
    - `groupId` string, uuid: Shared group id for split/batched content, such as multi-media Stories.
    - `contentIds` string[]: All content ids created by this mutation. Present for split/batched content.
  - `meta` unknown, required

## Changes

- **2026-10-19** `1b00fd7e4b15`: 1 info
  - added the new optional request property `settings/allOf[#/components/schemas/PublicProviderSettingsDto]/mentions`

[Operation history](https://skmtc.dev/maevesocial/apis/maeve-social-api/changes/v1/workspaces/:workspaceId/content/post.md)

---

[API](https://skmtc.dev/maevesocial/apis/maeve-social-api.md) · [All operations](https://skmtc.dev/maevesocial/apis/maeve-social-api/llms.txt) · [OpenAPI document](https://skmtc.dev/maevesocial/apis/maeve-social-api/revisions/1b00fd7e4b15?raw)
