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

# Generate comment drafts

> Generates a fresh Extrovert comment draft for each listed post of one owner, using each post's campaign Voice (or the given campaign). Each post is generated on its own and gets its own result in request order — the full comment with its draft text, or the reason it failed; a failed post never hides or undoes the others. Batch generation never takes instructions and never improves; nothing is approved or posted. Up to 10 posts per call.



## OpenAPI

````yaml https://api.goextrovert.com/client/v2/docs-json post /client/v2/comments/generate-drafts
openapi: 3.1.0
info:
  title: Extrovert Client API
  description: >-
    Public API for Extrovert platform integration. Use your API key for
    authentication.
  version: '1.0'
  contact: {}
servers:
  - url: https://api.goextrovert.com/
    description: API Server
security: []
tags: []
paths:
  /client/v2/comments/generate-drafts:
    post:
      tags:
        - Comments
      summary: Generate comment drafts
      description: >-
        Generates a fresh Extrovert comment draft for each listed post of one
        owner, using each post's campaign Voice (or the given campaign). Each
        post is generated on its own and gets its own result in request order —
        the full comment with its draft text, or the reason it failed; a failed
        post never hides or undoes the others. Batch generation never takes
        instructions and never improves; nothing is approved or posted. Up to 10
        posts per call.
      operationId: CommentsClientApiController_generateDrafts
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateDraftsRequestDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateDraftsResponseDto'
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientApiErrorResponseDto'
      security:
        - api-key: []
components:
  schemas:
    GenerateDraftsRequestDto:
      type: object
      properties:
        ownerId:
          type: string
          format: uuid
          description: >-
            LinkedIn account owner whose comments are addressed. Often a managed
            account rather than the authenticated user.
        items:
          type: array
          minItems: 1
          maxItems: 10
          items:
            type: object
            properties:
              postId:
                type: string
                format: uuid
                description: Post to generate a comment draft for.
              campaignId:
                description: >-
                  Accessible campaign whose Voice must be used. When omitted,
                  the post's own campaign is used.
                type: string
                format: uuid
            required:
              - postId
          description: >-
            Freshly generate 1–10 drafts. This replaces existing reviewable text
            for each post+owner and may change React only to Comment and react;
            review results before approval.
      required:
        - ownerId
        - items
    GenerateDraftsResponseDto:
      type: object
      properties:
        status:
          type: string
          const: success
          description: Response status
        data:
          type: array
          items:
            type: object
            properties:
              index:
                type: integer
                minimum: 0
                maximum: 9007199254740991
                description: Position of the element in the request list, starting at 0.
              id:
                description: >-
                  Element ID. Present for every updated or deleted element, and
                  for a created element once it was saved.
                type: string
                format: uuid
              item:
                description: The element as saved. Absent when the element failed.
                type: object
                properties:
                  postId:
                    type: string
                    format: uuid
                    description: LinkedIn post identity inside Extrovert.
                    examples:
                      - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                  ownerId:
                    type: string
                    format: uuid
                    description: >-
                      LinkedIn account owner whose profile will engage with the
                      post.
                    examples:
                      - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                  author:
                    type: object
                    properties:
                      id:
                        anyOf:
                          - type: string
                            format: uuid
                          - type: 'null'
                        description: >-
                          Extrovert prospect/profile ID when one exists in the
                          current workspace; null when only LinkedIn profile
                          data is available.
                      name:
                        type: string
                        description: Person's current LinkedIn display name.
                      linkedInUrl:
                        anyOf:
                          - type: string
                            format: uri
                          - type: 'null'
                        description: LinkedIn profile URL, or null when it is unavailable.
                      headline:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: LinkedIn headline, or null when it is unavailable.
                      avatarUrl:
                        anyOf:
                          - type: string
                            format: uri
                          - type: 'null'
                        description: Profile image URL, or null when it is unavailable.
                    required:
                      - id
                      - name
                      - linkedInUrl
                      - headline
                      - avatarUrl
                    description: Person whose post receives the engagement.
                  prospect:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            anyOf:
                              - type: string
                                format: uuid
                              - type: 'null'
                            description: >-
                              Extrovert prospect/profile ID when one exists in
                              the current workspace; null when only LinkedIn
                              profile data is available.
                          name:
                            type: string
                            description: Person's current LinkedIn display name.
                          linkedInUrl:
                            anyOf:
                              - type: string
                                format: uri
                              - type: 'null'
                            description: >-
                              LinkedIn profile URL, or null when it is
                              unavailable.
                          headline:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: LinkedIn headline, or null when it is unavailable.
                          avatarUrl:
                            anyOf:
                              - type: string
                                format: uri
                              - type: 'null'
                            description: Profile image URL, or null when it is unavailable.
                        required:
                          - id
                          - name
                          - linkedInUrl
                          - headline
                          - avatarUrl
                      - type: 'null'
                    description: >-
                      Primary relationship target: the author for Direct,
                      another person for Indirect, and null for Topical
                      engagement.
                  engagementRoute:
                    type: string
                    enum:
                      - Direct
                      - Indirect
                      - Topical
                  campaign:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: Stable Extrovert entity ID.
                        examples:
                          - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                      name:
                        type: string
                        description: Customer-facing entity name.
                    required:
                      - id
                      - name
                  prospectList:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                            description: Stable Extrovert entity ID.
                            examples:
                              - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                          name:
                            type: string
                            description: Customer-facing entity name.
                        required:
                          - id
                          - name
                      - type: 'null'
                  keyword:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                            description: Stable Extrovert entity ID.
                            examples:
                              - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                          name:
                            type: string
                            description: Customer-facing entity name.
                        required:
                          - id
                          - name
                      - type: 'null'
                  topic:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                            description: Stable Extrovert entity ID.
                            examples:
                              - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                          name:
                            type: string
                            description: Customer-facing entity name.
                        required:
                          - id
                          - name
                      - type: 'null'
                  engagementContexts:
                    minItems: 1
                    type: array
                    items:
                      type: object
                      properties:
                        campaign:
                          type: object
                          properties:
                            id:
                              type: string
                              format: uuid
                              description: Stable Extrovert entity ID.
                              examples:
                                - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                            name:
                              type: string
                              description: Customer-facing entity name.
                          required:
                            - id
                            - name
                          description: >-
                            Campaign in which this engagement context is
                            visible.
                        prospectList:
                          anyOf:
                            - type: object
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                  description: Stable Extrovert entity ID.
                                  examples:
                                    - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                                name:
                                  type: string
                                  description: Customer-facing entity name.
                              required:
                                - id
                                - name
                            - type: 'null'
                          description: >-
                            Prospect List for this context, or null outside a
                            Prospect List.
                        keyword:
                          anyOf:
                            - type: object
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                  description: Stable Extrovert entity ID.
                                  examples:
                                    - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                                name:
                                  type: string
                                  description: Customer-facing entity name.
                              required:
                                - id
                                - name
                            - type: 'null'
                          description: >-
                            Tracked keyword for this context, or null outside
                            Keyword collection.
                        topic:
                          anyOf:
                            - type: object
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                  description: Stable Extrovert entity ID.
                                  examples:
                                    - 8d256aa6-9b12-49a7-93ee-bf41634b5b60
                                name:
                                  type: string
                                  description: Customer-facing entity name.
                              required:
                                - id
                                - name
                            - type: 'null'
                          description: >-
                            Matched Monitored Topic, or null when no topic was
                            assigned.
                        engagementRoute:
                          type: string
                          enum:
                            - Direct
                            - Indirect
                            - Topical
                          description: >-
                            Direct means engaging on the prospect's post;
                            Indirect means engaging on another author's post to
                            warm the prospect; Topical has no prospect.
                        prospect:
                          anyOf:
                            - type: object
                              properties:
                                id:
                                  anyOf:
                                    - type: string
                                      format: uuid
                                    - type: 'null'
                                  description: >-
                                    Extrovert prospect/profile ID when one
                                    exists in the current workspace; null when
                                    only LinkedIn profile data is available.
                                name:
                                  type: string
                                  description: Person's current LinkedIn display name.
                                linkedInUrl:
                                  anyOf:
                                    - type: string
                                      format: uri
                                    - type: 'null'
                                  description: >-
                                    LinkedIn profile URL, or null when it is
                                    unavailable.
                                headline:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                  description: >-
                                    LinkedIn headline, or null when it is
                                    unavailable.
                                avatarUrl:
                                  anyOf:
                                    - type: string
                                      format: uri
                                    - type: 'null'
                                  description: >-
                                    Profile image URL, or null when it is
                                    unavailable.
                              required:
                                - id
                                - name
                                - linkedInUrl
                                - headline
                                - avatarUrl
                            - type: 'null'
                          description: >-
                            Effective relationship target for this context; null
                            only for Topical engagement without a prospect.
                      required:
                        - campaign
                        - prospectList
                        - keyword
                        - topic
                        - engagementRoute
                        - prospect
                    description: >-
                      All visible relationship contexts for this physical
                      comment. The first context is mirrored in the top-level
                      context fields.
                  post:
                    type: object
                    properties:
                      text:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          LinkedIn post text, or null when the post contains no
                          stored text.
                      linkedInUrl:
                        type: string
                        format: uri
                        description: LinkedIn URL of the post receiving the engagement.
                      publishedAt:
                        type: string
                        description: When the post was published on LinkedIn.
                        examples:
                          - '2025-06-30T14:02:07.456Z'
                          - '2025-07-03T08:30:00.000Z'
                      format:
                        type: string
                        enum:
                          - Text
                          - Image
                          - Video
                          - Link
                          - Article
                          - Poll
                          - Job
                          - Celebration
                        description: Customer-facing post format.
                      likeCount:
                        anyOf:
                          - type: integer
                            minimum: 0
                            maximum: 9007199254740991
                          - type: 'null'
                        description: >-
                          LinkedIn like count, or null when it cannot be parsed
                          reliably.
                      media:
                        type: object
                        properties:
                          kind:
                            type: string
                            enum:
                              - None
                              - Image
                              - Video
                            description: Media kind indicated by the LinkedIn post.
                          urls:
                            type: array
                            items:
                              type: string
                              format: uri
                            description: >-
                              Available media URLs. Empty for no media and
                              currently also for video posts because production
                              does not persist a video URL.
                        required:
                          - kind
                          - urls
                      externalLink:
                        anyOf:
                          - type: object
                            properties:
                              url:
                                type: string
                                format: uri
                                description: Destination linked from the LinkedIn post.
                              caption:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                                description: >-
                                  Link/article caption, or null when LinkedIn
                                  did not provide one.
                              summary:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                                description: >-
                                  Available post/link summary, or null when none
                                  was stored.
                            required:
                              - url
                              - caption
                              - summary
                          - type: 'null'
                        description: >-
                          Link/article metadata, or null when the post has no
                          external link.
                      originalPost:
                        anyOf:
                          - type: object
                            properties:
                              text:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                                description: Original post text, or null when unavailable.
                              linkedInUrl:
                                anyOf:
                                  - type: string
                                    format: uri
                                  - type: 'null'
                                description: Original post URL, or null when unavailable.
                              publishedAt:
                                anyOf:
                                  - type: string
                                    description: Date and time in ISO 8601 format
                                    examples:
                                      - '2025-06-30T14:02:07.456Z'
                                      - '2025-07-03T08:30:00.000Z'
                                  - type: 'null'
                                description: >-
                                  Original LinkedIn publication time, or null
                                  when unavailable.
                              author:
                                type: object
                                properties:
                                  id:
                                    anyOf:
                                      - type: string
                                        format: uuid
                                      - type: 'null'
                                    description: >-
                                      Extrovert prospect/profile ID when one
                                      exists in the current workspace; null when
                                      only LinkedIn profile data is available.
                                  name:
                                    type: string
                                    description: Person's current LinkedIn display name.
                                  linkedInUrl:
                                    anyOf:
                                      - type: string
                                        format: uri
                                      - type: 'null'
                                    description: >-
                                      LinkedIn profile URL, or null when it is
                                      unavailable.
                                  headline:
                                    anyOf:
                                      - type: string
                                      - type: 'null'
                                    description: >-
                                      LinkedIn headline, or null when it is
                                      unavailable.
                                  avatarUrl:
                                    anyOf:
                                      - type: string
                                        format: uri
                                      - type: 'null'
                                    description: >-
                                      Profile image URL, or null when it is
                                      unavailable.
                                required:
                                  - id
                                  - name
                                  - linkedInUrl
                                  - headline
                                  - avatarUrl
                                description: >-
                                  Original post author. ID and LinkedIn URL are
                                  null when the repost source did not provide
                                  them.
                              media:
                                type: object
                                properties:
                                  kind:
                                    type: string
                                    enum:
                                      - None
                                      - Image
                                      - Video
                                    description: Media kind indicated by the LinkedIn post.
                                  urls:
                                    type: array
                                    items:
                                      type: string
                                      format: uri
                                    description: >-
                                      Available media URLs. Empty for no media
                                      and currently also for video posts because
                                      production does not persist a video URL.
                                required:
                                  - kind
                                  - urls
                              externalLink:
                                anyOf:
                                  - type: object
                                    properties:
                                      url:
                                        type: string
                                        format: uri
                                        description: >-
                                          Destination linked from the LinkedIn
                                          post.
                                      caption:
                                        anyOf:
                                          - type: string
                                          - type: 'null'
                                        description: >-
                                          Link/article caption, or null when
                                          LinkedIn did not provide one.
                                      summary:
                                        anyOf:
                                          - type: string
                                          - type: 'null'
                                        description: >-
                                          Available post/link summary, or null
                                          when none was stored.
                                    required:
                                      - url
                                      - caption
                                      - summary
                                  - type: 'null'
                            required:
                              - text
                              - linkedInUrl
                              - publishedAt
                              - author
                              - media
                              - externalLink
                          - type: 'null'
                        description: >-
                          Original post for a repost-with-text, or null when
                          this is not a repost.
                    required:
                      - text
                      - linkedInUrl
                      - publishedAt
                      - format
                      - likeCount
                      - media
                      - externalLink
                      - originalPost
                  draft:
                    anyOf:
                      - type: object
                        properties:
                          text:
                            type: string
                            minLength: 1
                            description: >-
                              Effective comment text that will be posted if the
                              action includes a comment.
                          source:
                            type: string
                            enum:
                              - Extrovert-generated
                              - Agent-authored
                            description: >-
                              Who supplied the effective text. Agent-authored
                              includes edits that override an
                              Extrovert-generated body.
                          updatedAt:
                            type: string
                            description: When the effective draft last changed.
                            examples:
                              - '2025-06-30T14:02:07.456Z'
                              - '2025-07-03T08:30:00.000Z'
                        required:
                          - text
                          - source
                          - updatedAt
                      - type: 'null'
                    description: >-
                      Current effective draft, or null when no comment text
                      exists or React only needs none.
                  reactionBehavior:
                    anyOf:
                      - oneOf:
                          - type: object
                            properties:
                              behavior:
                                type: string
                                const: Comment only
                              reaction:
                                type: 'null'
                                description: >-
                                  No LinkedIn reaction is sent in Comment only
                                  mode.
                            required:
                              - behavior
                              - reaction
                          - type: object
                            properties:
                              behavior:
                                type: string
                                const: Comment and react
                              reaction:
                                type: string
                                enum:
                                  - Like
                                  - Celebrate
                                  - Support
                                  - Love
                                  - Insightful
                                  - Funny
                                description: >-
                                  LinkedIn reaction sent with the approved
                                  comment.
                            required:
                              - behavior
                              - reaction
                          - type: object
                            properties:
                              behavior:
                                type: string
                                const: React only
                              reaction:
                                type: string
                                enum:
                                  - Like
                                  - Celebrate
                                  - Support
                                  - Love
                                  - Insightful
                                  - Funny
                                description: LinkedIn reaction sent without a comment.
                            required:
                              - behavior
                              - reaction
                      - type: 'null'
                    description: >-
                      Selected comment/reaction behavior, or null before a
                      behavior has been initialized.
                  state:
                    type: string
                    enum:
                      - Generating
                      - Need approval
                      - Pending
                      - Error
                      - Posted
                      - Skipped
                  plannedAt:
                    anyOf:
                      - type: string
                        description: Date and time in ISO 8601 format
                        examples:
                          - '2025-06-30T14:02:07.456Z'
                          - '2025-07-03T08:30:00.000Z'
                      - type: 'null'
                    description: >-
                      Planned posting time. Set only when the campaign spaces
                      approved comments with a posting interval; null when
                      posting starts immediately after approval — even while the
                      comment is Pending or already Posted.
                  completedAt:
                    anyOf:
                      - type: string
                        description: Date and time in ISO 8601 format
                        examples:
                          - '2025-06-30T14:02:07.456Z'
                          - '2025-07-03T08:30:00.000Z'
                      - type: 'null'
                    description: >-
                      Posting/skip completion time, or null before a terminal
                      result.
                  error:
                    anyOf:
                      - type: object
                        properties:
                          code:
                            type: string
                            description: >-
                              Stable public error code suitable for branching.
                              It is not a raw provider or backend status.
                          message:
                            type: string
                            description: >-
                              Safe explanation of what failed and what the
                              caller should do next.
                          retryable:
                            type: boolean
                            description: >-
                              Whether retrying may succeed after the stated
                              condition is resolved.
                          occurredAt:
                            anyOf:
                              - type: string
                                description: Date and time in ISO 8601 format
                                examples:
                                  - '2025-06-30T14:02:07.456Z'
                                  - '2025-07-03T08:30:00.000Z'
                              - type: 'null'
                            description: >-
                              When this failure was recorded, or null when no
                              reliable timestamp exists.
                        required:
                          - code
                          - message
                          - retryable
                          - occurredAt
                      - type: 'null'
                    description: >-
                      Current generation/posting failure, or null when no
                      failure is active.
                  allowedActions:
                    type: array
                    items:
                      type: string
                      enum:
                        - generate-or-improve-draft
                        - set-draft-text
                        - set-reaction-behavior
                        - approve
                        - cancel-posting
                        - skip
                        - unskip
                    description: Actions valid for the current state.
                  updatedAt:
                    type: string
                    description: Latest owner-global comment state change.
                    examples:
                      - '2025-06-30T14:02:07.456Z'
                      - '2025-07-03T08:30:00.000Z'
                required:
                  - postId
                  - ownerId
                  - author
                  - prospect
                  - engagementRoute
                  - campaign
                  - prospectList
                  - keyword
                  - topic
                  - engagementContexts
                  - post
                  - draft
                  - reactionBehavior
                  - state
                  - plannedAt
                  - completedAt
                  - error
                  - allowedActions
                  - updatedAt
              error:
                description: >-
                  Why this element was not applied. Absent when the element
                  succeeded; the other elements are unaffected.
                type: object
                properties:
                  code:
                    type: string
                    description: >-
                      Status name of the failure, e.g. `NOT_FOUND`,
                      `PERMISSION_DENIED`, `INVALID_ARGUMENT`, `INTERNAL`.
                  message:
                    type: string
                    description: Human-readable reason this element was not applied.
                required:
                  - code
                  - message
            required:
              - index
          description: >-
            One result per requested post, in request order: the generated
            comment, or the reason it was not generated
        message:
          type: string
          description: Success message
          examples:
            - Operation completed successfully
      required:
        - status
        - data
        - message
    ClientApiErrorResponseDto:
      type: object
      properties:
        status:
          type: string
          description: Response status
          example: error
          enum:
            - error
        data:
          type: object
          description: Response data
          example: null
          nullable: true
        message:
          type: string
          description: Error message
          example: An error occurred while processing the request
      required:
        - status
        - data
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: X-API-Key
      description: API Key for authentication

````

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