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

# Create a Social Selling draft

> Creates a draft LinkedIn post for one identity: text, structured mentions, ordered media (`assetId`s: uploads, or a tracked post’s media which is copied into the workspace), an optional first comment, visibility, company page, and planning fields (series, pillar, objective, audience, factual sources, notes, attribution). Nothing is published: preview it, then schedule its `version`. All content rules are checked at once (400 `INVALID_DRAFT` with `details.problems`).

    > **Required scope:** `SOCIAL_SELLING_WRITE`
    >
    > **Rate limit:** 30 requests per minute



## OpenAPI

````yaml https://openapi.enginy.ai/definitions.json post /v1/social-selling/drafts
openapi: 3.1.0
info:
  title: Enginy API
  version: 1.0.0
  description: Public API for Enginy platform
servers:
  - url: https://openapi.enginy.ai
    description: Configured server
security: []
tags:
  - name: AI Variables
    description: >-
      Manage AI variables and discover the entity fields you can reference in
      prompts and entity requests.
  - name: Inbox
    description: >-
      Inbox endpoints for listing contact threads, reading thread messages,
      managing tags, and sending manual replies.
  - name: Workflows
    description: >-
      Build, validate, publish, run, and inspect advanced (graph) workflows,
      plus the block/condition catalog needed to author a workflow plan.
paths:
  /v1/social-selling/drafts:
    post:
      tags:
        - Social Selling
      summary: Create a Social Selling draft
      description: >-
        Creates a draft LinkedIn post for one identity: text, structured
        mentions, ordered media (`assetId`s: uploads, or a tracked post’s media
        which is copied into the workspace), an optional first comment,
        visibility, company page, and planning fields (series, pillar,
        objective, audience, factual sources, notes, attribution). Nothing is
        published: preview it, then schedule its `version`. All content rules
        are checked at once (400 `INVALID_DRAFT` with `details.problems`).

            > **Required scope:** `SOCIAL_SELLING_WRITE`
            >
            > **Rate limit:** 30 requests per minute
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                identityId:
                  type: integer
                  exclusiveMinimum: 0
                  description: >-
                    The identity that will publish it (an identity the caller
                    may use).
                text:
                  type: string
                  maxLength: 3000
                  description: >-
                    Post text, up to 3000 characters. Mention slices must match
                    their labels.
                title:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                  description: >-
                    Name in Enginy (never published). Defaults to the text’s
                    first line when scheduled.
                mentions:
                  type: array
                  items:
                    type: object
                    properties:
                      start:
                        type: integer
                        minimum: 0
                        description: >-
                          Offset in Unicode code points (an emoji counts as
                          one).
                      length:
                        type: integer
                        minimum: 1
                      kind:
                        type: string
                        enum:
                          - PROFILE
                          - COMPANY
                      urn:
                        type: string
                        minLength: 1
                        description: >-
                          `urn:li:fsd_profile:<id>` for a person,
                          `urn:li:fsd_company:<id>` for a company page.
                        example: urn:li:fsd_company:98422414
                      label:
                        type: string
                        minLength: 1
                        description: Exactly the mentioned slice of `text`.
                    required:
                      - start
                      - length
                      - kind
                      - urn
                      - label
                    description: >-
                      A mention: the slice `text[start, start+length)` links to
                      `urn`.
                  maxItems: 50
                attachments:
                  type: array
                  items:
                    type: object
                    properties:
                      assetId:
                        type: string
                        minLength: 1
                        maxLength: 64
                        description: >-
                          Media asset id: `spm_<postId>_<position>` for a
                          tracked post’s media (`spm_<postId>_r<position>` for
                          the media of the post it reposts), `ssa_<uuid>` for an
                          upload. Stable; never a URL.
                        example: spm_50307_0
                      altText:
                        type: string
                        maxLength: 4086
                        description: Overrides the asset’s alt text for this post.
                      title:
                        type: string
                        minLength: 1
                        maxLength: 58
                        description: >-
                          Document title shown on LinkedIn (required for
                          documents).
                    required:
                      - assetId
                  maxItems: 20
                  description: >-
                    Ordered media by `assetId`: uploads (`ssa_…`, completed) or
                    a tracked post’s media (`spm_…`, copied into the workspace
                    when attached, keeping the source and credit). Up to 20
                    images, or one video, or one document; never mixed.
                firstComment:
                  type:
                    - string
                    - 'null'
                  maxLength: 1250
                  description: >-
                    Posted by the same person 30 seconds after the post goes
                    live, on the published post (e.g. the link). null removes
                    it.
                visibility:
                  type: string
                  enum:
                    - ANYONE
                    - CONNECTIONS
                  description: Who can see the post on LinkedIn. Default ANYONE.
                postAsCompany:
                  type: boolean
                  description: >-
                    Publish as a LinkedIn company page the identity administers
                    (`companyUrn` required).
                companyUrn:
                  type:
                    - string
                    - 'null'
                  pattern: ^\d+$
                  description: The company page’s numeric LinkedIn id.
                sourceAttribution:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                  description: >-
                    Credit for a borrowed concept (kept with the draft and its
                    media copies).
                series:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                  description: Content series (e.g. "City maps").
                pillar:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                  description: >-
                    Content pillar (e.g. build in public, education, product,
                    industry).
                objective:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                audience:
                  type:
                    - string
                    - 'null'
                  maxLength: 200
                factualSources:
                  type:
                    - array
                    - 'null'
                  items:
                    type: string
                    minLength: 1
                    maxLength: 2000
                  maxItems: 20
                  description: Sources backing the facts in the post (URLs or references).
                notes:
                  type:
                    - string
                    - 'null'
                  maxLength: 5000
              required:
                - identityId
                - text
      responses:
        '201':
          description: The draft (version 1)
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - success
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      draftId:
                        type: number
                      version:
                        type: number
                        description: >-
                          Bumped by every edit. Pass it to schedule (approval)
                          and update.
                      status:
                        type: string
                        enum:
                          - DRAFT
                          - SCHEDULED
                          - PUBLISHED
                          - FAILED
                          - CANCELLED
                          - ARCHIVED
                      identity:
                        type: object
                        properties:
                          id:
                            type: number
                          name:
                            type:
                              - string
                              - 'null'
                        required:
                          - id
                          - name
                      title:
                        type:
                          - string
                          - 'null'
                      text:
                        type: string
                      mentions:
                        type: array
                        items:
                          type: object
                          properties:
                            start:
                              type: integer
                              minimum: 0
                              description: >-
                                Offset in Unicode code points (an emoji counts
                                as one).
                            length:
                              type: integer
                              minimum: 1
                            kind:
                              type: string
                              enum:
                                - PROFILE
                                - COMPANY
                            urn:
                              type: string
                              minLength: 1
                              description: >-
                                `urn:li:fsd_profile:<id>` for a person,
                                `urn:li:fsd_company:<id>` for a company page.
                              example: urn:li:fsd_company:98422414
                            label:
                              type: string
                              minLength: 1
                              description: Exactly the mentioned slice of `text`.
                          required:
                            - start
                            - length
                            - kind
                            - urn
                            - label
                          description: >-
                            A mention: the slice `text[start, start+length)`
                            links to `urn`.
                      attachments:
                        type: array
                        items:
                          type: object
                          properties:
                            assetId:
                              type: string
                            position:
                              type: number
                              description: 0-based order in the post (or draft).
                            origin:
                              type: string
                              enum:
                                - POST
                                - REPOSTED_POST
                                - UPLOAD
                            type:
                              type: string
                              enum:
                                - IMAGE
                                - VIDEO
                                - DOCUMENT
                                - ARTICLE
                                - POLL
                                - CELEBRATION
                                - REFERENCE
                            mimeType:
                              type:
                                - string
                                - 'null'
                            width:
                              type:
                                - number
                                - 'null'
                            height:
                              type:
                                - number
                                - 'null'
                            sizeBytes:
                              type:
                                - number
                                - 'null'
                            durationMs:
                              type:
                                - number
                                - 'null'
                            pageCount:
                              type:
                                - number
                                - 'null'
                            title:
                              type:
                                - string
                                - 'null'
                            description:
                              type:
                                - string
                                - 'null'
                            altText:
                              type:
                                - string
                                - 'null'
                            altTextSource:
                              type:
                                - string
                                - 'null'
                              enum:
                                - AUTHOR
                                - UPLOADER
                                - null
                              description: >-
                                Who wrote `altText`. Alt text is never generated
                                by Enginy.
                            linkUrl:
                              type:
                                - string
                                - 'null'
                              description: The link of an article or reference card.
                            pollOptions:
                              type:
                                - array
                                - 'null'
                              items:
                                type: string
                            transcript:
                              type: object
                              properties:
                                status:
                                  type: string
                                  enum:
                                    - NOT_COLLECTED
                              required:
                                - status
                              description: >-
                                Video captions and transcripts are not collected
                                from LinkedIn.
                            access:
                              type: object
                              properties:
                                status:
                                  type: string
                                  enum:
                                    - AVAILABLE
                                    - EXPIRING
                                    - EXPIRED
                                    - UNAVAILABLE
                                    - PENDING_UPLOAD
                                    - NOT_DOWNLOADABLE
                                  description: >-
                                    AVAILABLE: `downloadUrl` serves the file.
                                    EXPIRING: served by LinkedIn until
                                    `expiresAt` (refresh for a durable copy).
                                    EXPIRED / UNAVAILABLE: no working URL
                                    (`reason` says why; refresh).
                                    PENDING_UPLOAD: upload not completed.
                                    NOT_DOWNLOADABLE: no file (poll, link card).
                                downloadUrl:
                                  type:
                                    - string
                                    - 'null'
                                  description: >-
                                    HTTPS URL of the original file. Any HTTP
                                    client can GET it without a login, cookies
                                    or headers. Null unless AVAILABLE or
                                    EXPIRING.
                                previewUrl:
                                  type:
                                    - string
                                    - 'null'
                                  description: >-
                                    A smaller rendition to look at (the image
                                    itself; video/document thumbnail).
                                expiresAt:
                                  type:
                                    - string
                                    - 'null'
                                  description: >-
                                    When `downloadUrl` stops working (null =
                                    durable).
                                durable:
                                  type: boolean
                                  description: >-
                                    True when `downloadUrl` is Enginy’s durable
                                    copy.
                                refreshable:
                                  type: boolean
                                  description: >-
                                    True when
                                    `refresh_social_selling_media_access` can
                                    improve it.
                                verifiedAt:
                                  type:
                                    - string
                                    - 'null'
                                  description: >-
                                    When Enginy confirmed the URL serves the
                                    file (null = not probed).
                                reason:
                                  type:
                                    - string
                                    - 'null'
                              required:
                                - status
                                - downloadUrl
                                - previewUrl
                                - expiresAt
                                - durable
                                - refreshable
                                - verifiedAt
                                - reason
                            source:
                              type:
                                - object
                                - 'null'
                              properties:
                                trackedPostId:
                                  type: number
                                position:
                                  type: number
                                credit:
                                  type:
                                    - string
                                    - 'null'
                              required:
                                - trackedPostId
                                - position
                                - credit
                              description: >-
                                For a copy of a post’s media: where it came from
                                and its credit.
                          required:
                            - assetId
                            - position
                            - origin
                            - type
                            - mimeType
                            - width
                            - height
                            - sizeBytes
                            - durationMs
                            - pageCount
                            - title
                            - description
                            - altText
                            - altTextSource
                            - linkUrl
                            - pollOptions
                            - transcript
                            - access
                            - source
                      firstComment:
                        type:
                          - string
                          - 'null'
                      visibility:
                        type: string
                        enum:
                          - ANYONE
                          - CONNECTIONS
                      postAsCompany:
                        type: boolean
                      companyUrn:
                        type:
                          - string
                          - 'null'
                      lineage:
                        type: object
                        properties:
                          sourcePostId:
                            type:
                              - number
                              - 'null'
                            description: Tracked post it was adapted from.
                          sourceDraftId:
                            type:
                              - number
                              - 'null'
                          sourceAttribution:
                            type:
                              - string
                              - 'null'
                        required:
                          - sourcePostId
                          - sourceDraftId
                          - sourceAttribution
                      planning:
                        type: object
                        properties:
                          series:
                            type:
                              - string
                              - 'null'
                          pillar:
                            type:
                              - string
                              - 'null'
                          objective:
                            type:
                              - string
                              - 'null'
                          audience:
                            type:
                              - string
                              - 'null'
                          factualSources:
                            type: array
                            items:
                              type: string
                          notes:
                            type:
                              - string
                              - 'null'
                        required:
                          - series
                          - pillar
                          - objective
                          - audience
                          - factualSources
                          - notes
                      schedule:
                        type:
                          - object
                          - 'null'
                        properties:
                          publishingPostId:
                            type: number
                          scheduledVersion:
                            type: number
                          scheduledAt:
                            type: string
                          timezone:
                            type:
                              - string
                              - 'null'
                        required:
                          - publishingPostId
                          - scheduledVersion
                          - scheduledAt
                          - timezone
                      createdById:
                        type:
                          - number
                          - 'null'
                      updatedById:
                        type:
                          - number
                          - 'null'
                      createdAt:
                        type: string
                      updatedAt:
                        type: string
                    required:
                      - draftId
                      - version
                      - status
                      - identity
                      - title
                      - text
                      - mentions
                      - attachments
                      - firstComment
                      - visibility
                      - postAsCompany
                      - companyUrn
                      - lineage
                      - planning
                      - schedule
                      - createdById
                      - updatedById
                      - createdAt
                      - updatedAt
                required:
                  - status
                  - message
                  - data
        '400':
          description: >-
            `INVALID_DRAFT` with every problem in `details.problems`, or an
            asset that cannot be attached
        '403':
          description: >-
            Social Selling is not enabled for this workspace. Ask your workspace
            admin to enable the feature.
        '404':
          description: >-
            Identity or media asset not found in this workspace or outside the
            caller’s scope
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````

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