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

# Export Touchpoints

> Bulk, incremental export of Mosaic touchpoints, computed under your attribution settings and ordered by when they occurred. Requires Mosaic in addition to export access.

Send `occurredAt` on the first call, then pass `pagination.nextCursor` back as `cursor` until it is `null` or stops changing. Without `occurredAt.end`, the export stops a day before now so sessions and email clicks settle first. Persist the last cursor between syncs to resume.

> **Request access.** This endpoint is not enabled by default, contact the Conversion team to request access. Calls from accounts without it return `403 export_not_enabled`.



## OpenAPI

````yaml /openapi.json post /v2/exports/touchpoints
openapi: 3.1.0
info:
  title: Conversion API
  version: 2.0.0
  description: >-
    The Conversion API lets you programmatically manage contacts, track custom
    events, and manage their associated data.
servers:
  - url: https://pub-api.conversion.ai/api
security:
  - apiKey: []
paths:
  /v2/exports/touchpoints:
    post:
      summary: Export Touchpoints
      description: >-
        Bulk, incremental export of Mosaic touchpoints, computed under your
        attribution settings and ordered by when they occurred. Requires Mosaic
        in addition to export access.


        Send `occurredAt` on the first call, then pass `pagination.nextCursor`
        back as `cursor` until it is `null` or stops changing. Without
        `occurredAt.end`, the export stops a day before now so sessions and
        email clicks settle first. Persist the last cursor between syncs to
        resume.


        > **Request access.** This endpoint is not enabled by default, contact
        the Conversion team to request access. Calls from accounts without it
        return `403 export_not_enabled`.
      operationId: exportTouchpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                occurredAt:
                  type: object
                  description: >-
                    The half-open range to export. Required on the first call
                    and omitted with `cursor`.
                  required:
                    - start
                  properties:
                    start:
                      type: string
                      format: date-time
                      description: Touchpoints that occurred at or after this time.
                    end:
                      type: string
                      format: date-time
                      description: >-
                        Touchpoints that occurred before this time. Must be
                        after `start`. Omit it to keep a stored cursor advancing
                        as new touchpoints settle.
                cursor:
                  type: string
                  description: >-
                    The opaque cursor returned as `pagination.nextCursor` by a
                    previous call. Omit it on the first page. Send it without
                    filters, because the cursor carries them; sending both
                    returns `invalid_filter`.
                  examples:
                    - eyJ2IjoxLCJmIjp7fSwiayI6ImFiYyJ9
                limit:
                  type: integer
                  minimum: 1
                  maximum: 5000
                  default: 1000
                  description: >-
                    The maximum number of rows per page. Defaults to 1000.
                    Values are clamped to [1, 5000].
            examples:
              first-page:
                summary: Start a sync
                value:
                  occurredAt:
                    start: '2026-01-01T00:00:00Z'
                  limit: 1000
              next-page:
                summary: Resume from a cursor
                value:
                  cursor: eyJ2IjoxLCJmIjp7fSwiayI6ImFiYyJ9
      responses:
        '200':
          description: A page of touchpoints retrieved successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    required:
                      - touchpoints
                    properties:
                      touchpoints:
                        type: array
                        description: The current page of touchpoints.
                        items:
                          type: object
                          required:
                            - touchpointId
                            - contactId
                            - touchType
                            - occurredAt
                          properties:
                            touchpointId:
                              type: string
                              description: >-
                                The touchpoint's ID. Stable across exports, so
                                use it as the primary key.
                              examples:
                                - >-
                                  ws:3f2b6c1e-8d4a-4f7e-9a1b-2c3d4e5f6a7b:9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
                            contactId:
                              type: string
                              format: uuid
                              description: The contact (joins `contacts.id`).
                            touchType:
                              type: string
                              enum:
                                - WEB_SESSION
                                - EMAIL_CLICK
                                - CAMPAIGN_SUCCESS
                                - LEAD_GEN_FORM_SUBMISSION
                              description: The kind of touch.
                            occurredAt:
                              type: string
                              format: date-time
                              description: When the touch happened.
                            sessionId:
                              type:
                                - string
                                - 'null'
                              format: uuid
                              description: >-
                                The web session, on web touches and email
                                touches that landed one.
                            formId:
                              type:
                                - string
                                - 'null'
                              format: uuid
                              description: >-
                                The form submitted in the session or on the ad
                                platform.
                            landingPageUrl:
                              type:
                                - string
                                - 'null'
                              description: The first page of the session.
                            referrer:
                              type:
                                - string
                                - 'null'
                              description: The referring URL.
                            keyword:
                              type:
                                - string
                                - 'null'
                              description: The paid search keyword.
                            utmSource:
                              type:
                                - string
                                - 'null'
                              description: '`utm_source`. Empty on `CAMPAIGN_SUCCESS`.'
                            utmMedium:
                              type:
                                - string
                                - 'null'
                              description: '`utm_medium`. Empty on `CAMPAIGN_SUCCESS`.'
                            utmCampaign:
                              type:
                                - string
                                - 'null'
                              description: '`utm_campaign`. Empty on `CAMPAIGN_SUCCESS`.'
                            utmTerm:
                              type:
                                - string
                                - 'null'
                              description: '`utm_term`. Empty on `CAMPAIGN_SUCCESS`.'
                            utmContent:
                              type:
                                - string
                                - 'null'
                              description: '`utm_content`. Empty on `CAMPAIGN_SUCCESS`.'
                            adId:
                              type:
                                - string
                                - 'null'
                              description: The ad platform's ad ID.
                            adGroupId:
                              type:
                                - string
                                - 'null'
                              description: The ad platform's ad group (or ad set) ID.
                            adCampaignId:
                              type:
                                - string
                                - 'null'
                              description: The ad platform's campaign ID.
                            adAccountId:
                              type:
                                - string
                                - 'null'
                              description: The ad platform's account ID.
                            adProvider:
                              type:
                                - string
                                - 'null'
                              enum:
                                - GOOGLE
                                - META
                                - LINKEDIN
                                - null
                              description: The ad platform.
                            campaignId:
                              type:
                                - string
                                - 'null'
                              description: >-
                                The campaign on `CAMPAIGN_SUCCESS`, the
                                Conversion ad campaign on web and lead gen
                                touches, and the blast on email touches.
                            channelId:
                              type:
                                - string
                                - 'null'
                              format: uuid
                              description: The Mosaic channel the touch was assigned to.
                            subchannelId:
                              type:
                                - string
                                - 'null'
                              format: uuid
                              description: >-
                                The Mosaic subchannel, when the channel has one
                                that matched.
                  pagination:
                    type: object
                    required:
                      - nextCursor
                    properties:
                      nextCursor:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Opaque cursor for the next page, or `null` when there
                          are no more results. A page can be short or empty
                          while the cursor is non-null.
        '400':
          description: The request was malformed or contained invalid data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalid-cursor:
                  summary: Malformed cursor
                  value:
                    error:
                      code: invalid_cursor
                      message: invalid pagination cursor
                cursor-with-filters:
                  summary: Filters sent with a cursor
                  value:
                    error:
                      code: invalid_filter
                      message: >-
                        filters go on the first page only; the cursor carries
                        them
                missing-range:
                  summary: No range and no cursor
                  value:
                    error:
                      code: invalid_window
                      message: occurredAt.start is required when no cursor is supplied
                inverted-range:
                  summary: End before start
                  value:
                    error:
                      code: invalid_window
                      message: occurredAt.end must be after occurredAt.start
        '401':
          description: Authentication failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                unauthorized:
                  summary: Missing or invalid API key
                  value:
                    error:
                      code: unauthorized
                      message: API key is required
        '403':
          description: The export API, or Mosaic, is not enabled for this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                export-not-enabled:
                  summary: Export not enabled
                  value:
                    error:
                      code: export_not_enabled
                      message: business is not authorized to use the export API
                mosaic-not-enabled:
                  summary: Mosaic not enabled
                  value:
                    error:
                      code: export_not_enabled
                      message: business is not authorized to export this data
        '500':
          description: An unexpected server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                internal:
                  summary: Internal error
                  value:
                    error:
                      code: internal_error
                      message: failed to list touchpoints
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: A machine-readable error code.
              examples:
                - invalid_email
            message:
              type: string
              description: A human-readable error description.
              examples:
                - 'invalid email format: not-an-email'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Your Conversion API key. Found in **Settings > Integrations** in the
        dashboard. Format: `sk_live_<key_id>_<secret>`.

````

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