> ## 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.

# Export Social Selling engagers to a list

> Export Social Selling engagers (people who reacted to or commented on the caller’s tracked LinkedIn posts) into a contacts list: a new one (`target.listName`) or an existing one (`target.listId`). Select engagers with `prospectIds` (from the engagers lists), with `postId` (a tracked post id, not `publishingPostId`), or with `dateFrom`/`dateTo` (UTC days of post publication) optionally narrowed by `identityIds`; then `interaction` (all, commented, reacted) and `contacts` (`new` = not yet in Enginy). The caller’s own identities and blocklisted people are never exported. At most 5000 engagers per export. Asynchronous: the response returns as soon as the export starts and the contacts appear in the list when the workflow finishes (existing contacts are reused, not duplicated). With `scrapeFromLinkedIn` every exported contact is then enriched from LinkedIn, which spends credits; pass `maxCredits` to cap the estimate and preview first. Pass a unique `idempotencyKey` (or the `Idempotency-Key` header) so a retry is safe: the same key with the same request returns the first export with `replayed: true`, starts no new export and charges nothing, the same key with another request answers 409 `IDEMPOTENCY_KEY_REUSED`, and a key always answers with its first export whatever its outcome (use a new key to try again). A key is bound only once its export starts: a request refused with 400, 404 or 422 does not use it up. Without a key every call starts a new export (a retry with `target.listName` creates another list) and, with `scrapeFromLinkedIn`, every exported contact is scraped and charged again. Without a key, a lost response cannot be told apart from a failed start (a list of that name can exist either way), so send a key whenever a retry is possible. Once an export finishes, `preview_social_selling_engager_export` with the same selection and `contacts: "new"` stops counting the engagers it exported (engagers without a LinkedIn profile URL are never exported and keep counting).

Responses include direct Enginy app URLs when available. The response includes `listAppUrl` for the destination list. MCP agents should return those URLs to users whenever they are present in the response.

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



## OpenAPI

````yaml https://openapi.enginy.ai/definitions.json post /v1/social-selling/engagers/export
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/engagers/export:
    post:
      tags:
        - Social Selling
      summary: Export Social Selling engagers to a list
      description: >-
        Export Social Selling engagers (people who reacted to or commented on
        the caller’s tracked LinkedIn posts) into a contacts list: a new one
        (`target.listName`) or an existing one (`target.listId`). Select
        engagers with `prospectIds` (from the engagers lists), with `postId` (a
        tracked post id, not `publishingPostId`), or with `dateFrom`/`dateTo`
        (UTC days of post publication) optionally narrowed by `identityIds`;
        then `interaction` (all, commented, reacted) and `contacts` (`new` = not
        yet in Enginy). The caller’s own identities and blocklisted people are
        never exported. At most 5000 engagers per export. Asynchronous: the
        response returns as soon as the export starts and the contacts appear in
        the list when the workflow finishes (existing contacts are reused, not
        duplicated). With `scrapeFromLinkedIn` every exported contact is then
        enriched from LinkedIn, which spends credits; pass `maxCredits` to cap
        the estimate and preview first. Pass a unique `idempotencyKey` (or the
        `Idempotency-Key` header) so a retry is safe: the same key with the same
        request returns the first export with `replayed: true`, starts no new
        export and charges nothing, the same key with another request answers
        409 `IDEMPOTENCY_KEY_REUSED`, and a key always answers with its first
        export whatever its outcome (use a new key to try again). A key is bound
        only once its export starts: a request refused with 400, 404 or 422 does
        not use it up. Without a key every call starts a new export (a retry
        with `target.listName` creates another list) and, with
        `scrapeFromLinkedIn`, every exported contact is scraped and charged
        again. Without a key, a lost response cannot be told apart from a failed
        start (a list of that name can exist either way), so send a key whenever
        a retry is possible. Once an export finishes,
        `preview_social_selling_engager_export` with the same selection and
        `contacts: "new"` stops counting the engagers it exported (engagers
        without a LinkedIn profile URL are never exported and keep counting).


        Responses include direct Enginy app URLs when available. The response
        includes `listAppUrl` for the destination list. MCP agents should return
        those URLs to users whenever they are present in the response.

            > **Required scope:** `SOCIAL_SELLING_WRITE`
            >
            > **Rate limit:** 30 requests per minute
      parameters:
        - schema:
            type: string
            minLength: 1
            maxLength: 128
            pattern: ^[a-zA-Z0-9._:-]+$
            description: >-
              Same as the body field `idempotencyKey`. Ignored when the body
              sends one (the body wins); an empty header counts as absent.
          required: false
          description: >-
            Same as the body field `idempotencyKey`. Ignored when the body sends
            one (the body wins); an empty header counts as absent.
          name: Idempotency-Key
          in: header
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                prospectIds:
                  type: array
                  items:
                    type: integer
                    exclusiveMinimum: 0
                  minItems: 1
                  maxItems: 1000
                  description: >-
                    Export exactly these engagers (`prospectId` from the
                    engagers lists), 1–1000. Do not combine with `postId`,
                    `dateFrom`/`dateTo` or `identityIds`.
                  example:
                    - 5101
                    - 5102
                postId:
                  type: integer
                  exclusiveMinimum: 0
                  description: >-
                    Filter: every engager of this tracked post (`id` from the
                    posts list, not `publishingPostId`). Wins over
                    `dateFrom`/`dateTo`.
                dateFrom:
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}$
                  example: '2026-09-01'
                  description: >-
                    Filter: engagers of the posts published from this day (UTC,
                    inclusive). Required with `dateTo` unless `postId` is set.
                dateTo:
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}$
                  example: '2026-09-01'
                  description: >-
                    Filter: engagers of the posts published until this day (UTC,
                    inclusive).
                identityIds:
                  type: array
                  items:
                    type: integer
                    exclusiveMinimum: 0
                  minItems: 1
                  maxItems: 500
                  description: >-
                    Filter: only engagers of these identities’ posts. Defaults
                    to every identity the caller may see; ids outside that scope
                    match nothing.
                interaction:
                  type: string
                  enum:
                    - all
                    - commented
                    - reacted
                  default: all
                  description: >-
                    Which engagers: `all`, only those who `commented`, or only
                    those who `reacted`.
                contacts:
                  type: string
                  enum:
                    - all
                    - new
                  default: all
                  description: >-
                    `new` keeps only engagers that are not contacts in Enginy
                    yet.
                scrapeFromLinkedIn:
                  type: boolean
                  default: false
                  description: >-
                    Enrich every exported contact with LinkedIn profile data
                    after the export. Costs `creditsPerContact` credits per
                    enriched contact; off by default.
                target:
                  anyOf:
                    - type: object
                      properties:
                        listName:
                          type: string
                          minLength: 1
                          maxLength: 255
                          description: >-
                            Create a new contacts list with this name. A retry
                            without `idempotencyKey` creates another list.
                          example: Engagers of the July launch post
                      required:
                        - listName
                      additionalProperties: false
                    - type: object
                      properties:
                        listId:
                          type: integer
                          exclusiveMinimum: 0
                          description: Add to this existing contacts list.
                      required:
                        - listId
                      additionalProperties: false
                  description: >-
                    Where the contacts land: `{ "listName": … }` (new list) or
                    `{ "listId": … }`.
                maxCredits:
                  type: number
                  minimum: 0
                  description: >-
                    Refuse (422 `MAX_CREDITS_EXCEEDED`, nothing created) when
                    the enrichment estimate is above this many credits.
                    Recommended with `scrapeFromLinkedIn`.
                idempotencyKey:
                  type: string
                  minLength: 1
                  maxLength: 128
                  pattern: ^[a-zA-Z0-9._:-]+$
                  description: >-
                    Optional idempotency key, unique per export (1–128 letters,
                    digits, `.`, `_`, `:` or `-`); also accepted as the
                    `Idempotency-Key` header, the body wins. Reuse it only to
                    retry the same request: the same key with the same request
                    returns the first export with `replayed: true`, starts no
                    new export and charges nothing, and the same key with a
                    different request answers 409 `IDEMPOTENCY_KEY_REUSED`. A
                    key is bound only once its export starts: a request refused
                    with 400, 404 or 422 does not use it up. It is then
                    remembered while the export runs and for at least 24 hours
                    after it finishes, and always answers with that first export
                    whatever its outcome: use a new key to try again.
                  example: september-engagers-2026-10-01
              required:
                - target
      responses:
        '201':
          description: >-
            Export started, contacts land in the list when it finishes; or, with
            `replayed: true`, the export this `idempotencyKey` started first
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - success
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      listId:
                        type: number
                        description: The contacts list the engagers are being added to.
                      workflowId:
                        type: number
                        description: The export workflow (asynchronous).
                      prospectCount:
                        type: number
                        description: Engagers being exported.
                      estimatedCredits:
                        type: number
                        description: Upper bound of the enrichment credits.
                      replayed:
                        type: boolean
                        description: >-
                          True when this answers an earlier export started with
                          the same `idempotencyKey`: this call started no export
                          and charged nothing.
                      listAppUrl:
                        type: string
                        description: Opens the list in Enginy.
                    required:
                      - listId
                      - workflowId
                      - prospectCount
                      - estimatedCredits
                      - replayed
                      - listAppUrl
                required:
                  - status
                  - message
                  - data
        '400':
          description: >-
            Invalid selection, target or `idempotencyKey` (body or
            `Idempotency-Key` header), no engager matches the selection
            (`details.code` `NO_MATCHING_ENGAGERS`, nothing created), or not
            enough credits for `scrapeFromLinkedIn` (`code:
            INSUFFICIENT_CREDITS`, with `available`)
        '403':
          description: >-
            Social Selling is not enabled for this workspace. Ask your workspace
            admin to enable the feature. Also answered when the API key creator
            may not edit or import contacts.
        '404':
          description: >-
            `target.listId` is not a contacts list of this workspace visible to
            the caller (`details.code` `LIST_NOT_FOUND`), or `postId` is not a
            visible tracked post
        '409':
          description: >-
            `details.code` `IDEMPOTENCY_KEY_REUSED`: this `idempotencyKey`
            already started an export with a different request. Nothing was
            exported or charged; use a new key for a new export
        '422':
          description: >-
            Nothing was created: `details.code` `TOO_MANY_PROSPECTS` (more than
            5000 engagers: narrow the selection) or `MAX_CREDITS_EXCEEDED` (the
            estimate is above `maxCredits`)
      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.