> ## Documentation Index
> Fetch the complete documentation index at: https://docs.woopsocial.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get post

> Returns one post with its social account posts inline.




## OpenAPI

````yaml /openapi.yaml get /posts/{postId}
openapi: 3.1.0
info:
  title: WoopSocial API
  version: 1.0.0
  summary: API for WoopSocial integrations.
  description: >
    This is the public-facing OpenAPI contract for WoopSocial. It supports
    scheduling posts for various social media platforms such as Facebook,
    Instagram, LinkedIn, LinkedIn Pages, Pinterest, Threads, TikTok, X (formerly
    Twitter) and YouTube.
servers:
  - url: https://api.woopsocial.com/v1
    description: WoopSocial API URL.
  - url: http://localhost:9123/api/external/v1
    description: Local WoopSocial API URL.
security: []
tags:
  - name: Posts
    description: Post scheduling endpoints.
  - name: Projects
    description: Project discovery endpoints.
  - name: Social Accounts
    description: Connected social account discovery endpoints.
  - name: Media
    description: Media upload endpoints.
  - name: Webhooks
    description: Webhook endpoint management.
  - name: Health
    description: Basic connectivity endpoints.
paths:
  /posts/{postId}:
    get:
      tags:
        - Posts
      summary: Get post
      description: |
        Returns one post with its social account posts inline.
      operationId: getPost
      parameters:
        - $ref: '#/components/parameters/PostId'
      responses:
        '200':
          description: Post found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Post'
        '404':
          description: Post not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPostErrorResponse'
        '429':
          $ref: '#/components/responses/TooManyConcurrentRequests'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPostErrorResponse'
      security:
        - ApiKey: []
components:
  parameters:
    PostId:
      name: postId
      in: path
      required: true
      schema:
        type: string
      description: Post identifier.
  schemas:
    Post:
      type: object
      additionalProperties: false
      required:
        - id
        - projectId
        - content
        - schedule
        - autoDeleteMediaAfterPublish
        - socialAccountPosts
        - createdAt
        - updatedAt
      properties:
        id:
          type: string
          description: Post identifier.
        projectId:
          type: string
          description: Project identifier that the selected social accounts belong to.
        content:
          $ref: '#/components/schemas/PostContent'
        schedule:
          $ref: '#/components/schemas/PostSchedule'
        autoDeleteMediaAfterPublish:
          type: boolean
          description: Whether media auto-delete-after-publish is enabled for this post.
        retryPolicy:
          $ref: '#/components/schemas/PostRetryPolicy'
        socialAccountPosts:
          type: array
          minItems: 1
          description: Platform-specific post instances.
          items:
            $ref: '#/components/schemas/SocialAccountPost'
        createdAt:
          type: string
          format: date-time
          description: UTC time when the post was created.
        updatedAt:
          type: string
          format: date-time
          description: UTC time when the post was last updated.
    GetPostErrorResponse:
      type: object
      additionalProperties: false
      required:
        - code
        - message
      properties:
        code:
          $ref: '#/components/schemas/GetPostErrorCode'
        message:
          type: string
    PostContent:
      type: array
      minItems: 1
      maxItems: 1
      description: |
        Post content expressed as thread items.

        The array exists for future thread support. Currently exactly one item
        is returned.
      items:
        $ref: '#/components/schemas/PostContentItem'
    PostSchedule:
      description: When the post should be published.
      oneOf:
        - $ref: '#/components/schemas/DraftPostSchedule'
        - $ref: '#/components/schemas/PublishNowPostSchedule'
        - $ref: '#/components/schemas/ScheduleForLaterPostSchedule'
      discriminator:
        propertyName: type
        mapping:
          DRAFT: '#/components/schemas/DraftPostSchedule'
          PUBLISH_NOW: '#/components/schemas/PublishNowPostSchedule'
          SCHEDULE_FOR_LATER: '#/components/schemas/ScheduleForLaterPostSchedule'
    PostRetryPolicy:
      type: object
      additionalProperties: false
      description: |
        Automatically creates a scheduled retry post for each failed target.
        Successful targets are never copied. Known failures requiring user
        intervention, such as insufficient credits or disconnected accounts,
        are not automatically retried. If the platform published a post but
        its response was lost, retrying may produce a duplicate.
      required:
        - maxRetries
        - delaySeconds
      properties:
        maxRetries:
          type: integer
          minimum: 1
          maximum: 5
          description: >-
            Maximum automatic retries per target, excluding the original
            attempt.
        delaySeconds:
          type: integer
          minimum: 60
          maximum: 86400
          description: Minimum wait after each failure before the retry is published.
    SocialAccountPost:
      oneOf:
        - $ref: '#/components/schemas/PinterestPost'
        - $ref: '#/components/schemas/InstagramPost'
        - $ref: '#/components/schemas/FacebookPost'
        - $ref: '#/components/schemas/ThreadsPost'
        - $ref: '#/components/schemas/TikTokPost'
        - $ref: '#/components/schemas/YouTubePost'
        - $ref: '#/components/schemas/XPost'
        - $ref: '#/components/schemas/LinkedInPost'
        - $ref: '#/components/schemas/LinkedInPagesPost'
        - $ref: '#/components/schemas/WoopTestPost'
      discriminator:
        propertyName: platform
        mapping:
          PINTEREST: '#/components/schemas/PinterestPost'
          INSTAGRAM: '#/components/schemas/InstagramPost'
          FACEBOOK: '#/components/schemas/FacebookPost'
          THREADS: '#/components/schemas/ThreadsPost'
          TIKTOK: '#/components/schemas/TikTokPost'
          YOUTUBE: '#/components/schemas/YouTubePost'
          X: '#/components/schemas/XPost'
          LINKEDIN: '#/components/schemas/LinkedInPost'
          LINKEDIN_PAGES: '#/components/schemas/LinkedInPagesPost'
          WOOPTEST: '#/components/schemas/WoopTestPost'
    GetPostErrorCode:
      type: string
      enum:
        - POST_NOT_FOUND
        - INTERNAL_ERROR
    ConcurrencyLimitErrorResponse:
      type: object
      additionalProperties: false
      required:
        - code
        - message
      properties:
        code:
          $ref: '#/components/schemas/ConcurrencyLimitErrorCode'
        message:
          type: string
    PostContentItem:
      type: object
      additionalProperties: false
      minProperties: 1
      properties:
        text:
          type: string
          description: Text content for this thread item.
        media:
          type: array
          items:
            $ref: '#/components/schemas/PostContentMedia'
    DraftPostSchedule:
      title: Draft
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - DRAFT
    PublishNowPostSchedule:
      title: Publish Now
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - PUBLISH_NOW
    ScheduleForLaterPostSchedule:
      title: Schedule For Later
      type: object
      additionalProperties: false
      required:
        - type
        - scheduledFor
      properties:
        type:
          type: string
          enum:
            - SCHEDULE_FOR_LATER
        scheduledFor:
          type: string
          format: date-time
          description: >
            UTC time (ISO 8601) when the post should be published. The value
            must be in the future.
    PinterestPost:
      title: Pinterest
      allOf:
        - $ref: '#/components/schemas/PinterestPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/PinterestFields'
    InstagramPost:
      title: Instagram
      allOf:
        - $ref: '#/components/schemas/InstagramPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/InstagramFields'
    FacebookPost:
      title: Facebook
      allOf:
        - $ref: '#/components/schemas/FacebookPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/FacebookFields'
    ThreadsPost:
      title: Threads
      allOf:
        - $ref: '#/components/schemas/ThreadsPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
    TikTokPost:
      title: TikTok
      allOf:
        - $ref: '#/components/schemas/TikTokPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/TikTokFields'
    YouTubePost:
      title: YouTube
      allOf:
        - $ref: '#/components/schemas/YouTubePlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/YouTubeFields'
    XPost:
      title: X
      allOf:
        - $ref: '#/components/schemas/XPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
    LinkedInPost:
      title: LinkedIn
      allOf:
        - $ref: '#/components/schemas/LinkedInPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/LinkedInFields'
    LinkedInPagesPost:
      title: LinkedIn Pages
      allOf:
        - $ref: '#/components/schemas/LinkedInPagesPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/LinkedInFields'
    WoopTestPost:
      title: WoopTest
      allOf:
        - $ref: '#/components/schemas/WoopTestPlatform'
        - $ref: '#/components/schemas/SocialAccountPostBase'
        - $ref: '#/components/schemas/WoopTestFields'
    ConcurrencyLimitErrorCode:
      type: string
      enum:
        - TOO_MANY_CONCURRENT_REQUESTS
    PostContentMedia:
      description: |
        Resolved content media.
      oneOf:
        - $ref: '#/components/schemas/MediaLibraryPostContentMedia'
      discriminator:
        propertyName: type
        mapping:
          MEDIA_LIBRARY: '#/components/schemas/MediaLibraryPostContentMedia'
    PinterestPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - PINTEREST
    SocialAccountPostBase:
      type: object
      additionalProperties: false
      required:
        - socialAccountPostId
        - postId
        - projectId
        - socialAccountId
        - deliveryStatus
        - content
        - schedule
        - createdAt
        - updatedAt
        - analytics
      properties:
        socialAccountPostId:
          type: string
          description: Social account post identifier.
        postId:
          type: string
          description: Parent post identifier.
        projectId:
          type: string
          description: Project identifier.
        socialAccountId:
          type: string
          description: Connected social account identifier.
        deliveryStatus:
          $ref: '#/components/schemas/DeliveryStatus'
        content:
          $ref: '#/components/schemas/PostContent'
          description: Content for this social account post.
        schedule:
          $ref: '#/components/schemas/PostSchedule'
          description: Schedule for this social account post.
        createdAt:
          type: string
          format: date-time
          description: UTC time when the social account post was created.
        updatedAt:
          type: string
          format: date-time
          description: UTC time when the social account post was last updated.
        deliveryCompletedAt:
          type: string
          format: date-time
          description: >-
            UTC time when the latest delivery attempt for this social account
            post completed both for successful (`PUBLISHED`) and unsuccessful
            (`FAILED`) terminal `deliveryStatus` values.
        externalPostId:
          type: string
        externalPostUrl:
          type: string
          format: uri
        errorMessage:
          type: string
        analytics:
          $ref: '#/components/schemas/PostAnalytics'
    PinterestFields:
      type: object
      required:
        - pinterestBoardId
      properties:
        pinterestBoardId:
          type: string
          description: Identifier of the board to pin to.
        title:
          type: string
        link:
          type: string
          maxLength: 2048
          description: Destination URL to attach to the Pin.
    InstagramPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - INSTAGRAM
    InstagramFields:
      type: object
      required:
        - postType
      properties:
        postType:
          $ref: '#/components/schemas/InstagramPostType'
        cover:
          $ref: '#/components/schemas/PostContentMediaInput'
          description: >
            Optional image media reference to use as the cover image for an
            Instagram Reel.


            This field applies only to `postType=REEL`.
        trialParams:
          $ref: '#/components/schemas/InstagramTrialParams'
          description: >
            Optional Trial Reel settings. When provided, `postType` must be
            `REEL`.


            Omit this field to publish a regular Reel.
    FacebookPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - FACEBOOK
    FacebookFields:
      type: object
      required:
        - postType
      properties:
        link:
          type: string
        locationId:
          type: string
          description: Facebook place ID to attach to the post.
        postType:
          $ref: '#/components/schemas/FacebookPostType'
    ThreadsPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - THREADS
    TikTokPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - TIKTOK
    TikTokFields:
      type: object
      required:
        - postType
        - allowComment
        - allowDuet
        - allowStitch
        - isYourBrand
        - isBrandedContent
        - autoAddMusic
      properties:
        postType:
          $ref: '#/components/schemas/TikTokPostType'
        cover:
          $ref: '#/components/schemas/PostContentMediaInput'
          description: |
            Optional image media reference to use as a custom cover for
            `postType=VIDEO`. WoopSocial stitches the image as a single
            frame at the beginning of the video before sending it to TikTok.
        postMode:
          $ref: '#/components/schemas/TikTokPostMode'
          default: DIRECT_POST
          description: >
            TikTok posting mode.


            Defaults to `DIRECT_POST` when omitted.


            `DIRECT_POST` publishes directly to TikTok.


            `MEDIA_UPLOAD` uploads the media to TikTok so the creator can

            finish and publish it in TikTok. Users will receive an inbox
            notification.


            Fields not used by the selected mode may be ignored by TikTok.
        privacyLevel:
          $ref: '#/components/schemas/TikTokPrivacyLevel'
          description: Required when `postMode=DIRECT_POST`. Not used for `MEDIA_UPLOAD`.
        allowComment:
          type: boolean
          description: Whether comments should be allowed for this TikTok post.
        allowDuet:
          type: boolean
          description: |
            Whether duets should be allowed for this TikTok post.

            This field applies to `postType=VIDEO`.

            When `postType=PHOTO`, this field is required by the API contract
            but is not used by TikTok.
        allowStitch:
          type: boolean
          description: |
            Whether stitches should be allowed for this TikTok post.

            This field applies to `postType=VIDEO`.

            When `postType=PHOTO`, this field is required by the API contract
            but is not used by TikTok.
        isYourBrand:
          type: boolean
          description: >-
            Whether the post should be disclosed as "Your brand" content on
            TikTok.
        isBrandedContent:
          type: boolean
          description: Whether the post should be disclosed as branded content on TikTok.
        isAiGeneratedContent:
          type: boolean
          default: false
          description: >
            Whether the TikTok post contains AI-generated content. This field
            applies to video posts.
        autoAddMusic:
          type: boolean
          description: |
            Whether TikTok should automatically add music to this post.

            This field applies to `postType=PHOTO`.

            When `postType=VIDEO`, this field is required by the API contract
            but is not used by TikTok.
    YouTubePlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - YOUTUBE
    YouTubeFields:
      type: object
      required:
        - title
        - privacy
      properties:
        title:
          type: string
        privacy:
          $ref: '#/components/schemas/YouTubePrivacy'
        category:
          type: string
        tags:
          type: array
          items:
            type: string
        madeForKids:
          type: boolean
    XPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - X
    LinkedInPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - LINKEDIN
    LinkedInFields:
      type: object
      properties:
        link:
          type: string
          description: URL to publish as a LinkedIn link preview card.
    LinkedInPagesPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - LINKEDIN_PAGES
    WoopTestPlatform:
      type: object
      required:
        - platform
      properties:
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
            - type: string
              enum:
                - WOOPTEST
    WoopTestFields:
      type: object
      properties:
        shouldSucceed:
          type: boolean
          default: true
          description: |
            Whether the simulated delivery should succeed or fail.

            Defaults to `true`. Set to `false` to simulate a delivery failure.
    MediaLibraryPostContentMedia:
      title: Media Library Post Content Media
      type: object
      additionalProperties: false
      required:
        - type
        - mediaId
        - mediaType
        - url
        - thumbnailUrl
      properties:
        type:
          type: string
          enum:
            - MEDIA_LIBRARY
        mediaId:
          type: string
          description: Media identifier from the media library.
        mediaType:
          $ref: '#/components/schemas/MediaType'
        url:
          type: string
          format: uri
          description: Canonical media URL.
        thumbnailUrl:
          type: string
          format: uri
          description: Thumbnail or preview URL for the media item.
    SocialPlatform:
      type: string
      enum:
        - PINTEREST
        - LINKEDIN
        - LINKEDIN_PAGES
        - INSTAGRAM
        - FACEBOOK
        - THREADS
        - TIKTOK
        - X
        - YOUTUBE
        - WOOPTEST
      description: |
        Identifies which social media platform this data structure targets.
    DeliveryStatus:
      type: string
      description: >
        Delivery lifecycle status for a post.


        `NOT_STARTED`: The post exists and is scheduled, but delivery has not
        started yet.

        `SENDING`: Delivery is currently in progress.

        `PUBLISHED`: Delivery completed successfully.

        `FAILED`: Delivery completed unsuccessfully.
      enum:
        - NOT_STARTED
        - SENDING
        - PUBLISHED
        - FAILED
    PostAnalytics:
      type: object
      additionalProperties: false
      description: >
        Latest stored lifetime metrics for this social account post. Each
        supported

        metric contains its latest snapshot, or an empty array if no observation

        exists. Unsupported metrics are omitted; unsupported platforms and post

        types return an empty object. Zero is a recorded value, not missing
        data.


        Metrics are collected asynchronously and can have different snapshot
        dates.

        Reading posts does not refresh analytics. Arrays allow future snapshot

        ranges without changing the response shape; date-range queries are not

        currently supported.
      properties:
        views:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        impressions:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        uniqueImpressions:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        likes:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        reactions:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        comments:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        shares:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        saves:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        clicks:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
        engagementRate:
          $ref: '#/components/schemas/PostAnalyticsSnapshots'
          description: >-
            LinkedIn Pages provider-reported engagement ratio; 0.03 means 3
            percent.
    InstagramPostType:
      type: string
      enum:
        - POST
        - REEL
        - STORY
    PostContentMediaInput:
      description: |
        Content media reference.
      oneOf:
        - $ref: '#/components/schemas/MediaLibraryPostContentMediaInput'
      discriminator:
        propertyName: type
        mapping:
          MEDIA_LIBRARY: '#/components/schemas/MediaLibraryPostContentMediaInput'
    InstagramTrialParams:
      type: object
      additionalProperties: false
      required:
        - graduationStrategy
      properties:
        graduationStrategy:
          $ref: '#/components/schemas/InstagramTrialGraduationStrategy'
    FacebookPostType:
      type: string
      enum:
        - TEXT_ONLY
        - IMAGE
        - VIDEO
        - REEL
        - STORY
    TikTokPostType:
      type: string
      enum:
        - VIDEO
        - PHOTO
    TikTokPostMode:
      type: string
      enum:
        - DIRECT_POST
        - MEDIA_UPLOAD
    TikTokPrivacyLevel:
      type: string
      enum:
        - PUBLIC_TO_EVERYONE
        - SELF_ONLY
        - MUTUAL_FOLLOW_FRIENDS
        - FOLLOWER_OF_CREATOR
    YouTubePrivacy:
      type: string
      enum:
        - public
        - private
        - unlisted
    MediaType:
      type: string
      enum:
        - IMAGE
        - VIDEO
    PostAnalyticsSnapshots:
      type: array
      items:
        $ref: '#/components/schemas/PostAnalyticsSnapshot'
    MediaLibraryPostContentMediaInput:
      title: Media Library Input
      type: object
      additionalProperties: false
      required:
        - type
        - mediaId
      properties:
        type:
          type: string
          enum:
            - MEDIA_LIBRARY
        mediaId:
          type: string
          description: >-
            Media identifier create by calling [`POST
            /media/upload-sessions`](/api-reference/media/start-media-upload-session)
            or [`POST /media`](/api-reference/media/upload-media).
    InstagramTrialGraduationStrategy:
      type: string
      description: >
        Controls how a Trial Reel graduates to followers. `MANUAL` leaves
        graduation

        to the user in Instagram. `SS_PERFORMANCE` lets Instagram graduate the
        Reel

        automatically based on its performance.
      enum:
        - MANUAL
        - SS_PERFORMANCE
    PostAnalyticsSnapshot:
      type: object
      additionalProperties: false
      required:
        - date
        - collectedAt
        - value
      properties:
        date:
          type: string
          format: date
          description: UTC date of the snapshot, not the day the engagement occurred.
        collectedAt:
          type: string
          format: date-time
          description: UTC collection timestamp for this observation.
        value:
          type: number
          format: double
          description: Observed lifetime count, or a ratio for engagementRate.
  responses:
    TooManyConcurrentRequests:
      description: Too many requests are already in progress for this API key.
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying.
          required: true
          schema:
            type: integer
            format: int32
            minimum: 1
            example: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ConcurrencyLimitErrorResponse'
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      bearerFormat: API key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.