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

# Get export status

> Use this endpoint to check the status of an asynchronous export job. Poll this endpoint after calling `POST /v3/products/exports` or `POST /v3/collections/exports` until the job reaches a terminal state (`completed` or `failed`).

###### Required parameters:
- `exportId` - the export job identifier returned from the create call, passed as a path parameter.

###### Please note:
- Status transitions: `pending` → `processing` → `completed` | `failed`.
- When `status` is `completed`, the response includes a `downloadUrls` map of signed URLs keyed by file identifier (e.g. `"0"`) or location code (e.g. `"US"`). Download the file(s) before the export record expires (48 hours after creation).
- When `status` is `failed`, the response includes an `errorMessage` describing the failure (e.g. `"Export timed out"`).
- The same poll endpoint serves both product export jobs and collection export jobs - `exportId` is sufficient to look up either.
- Returns `404` if the supplied `exportId` does not exist or the export record has expired.

#### Permissions
- Requires: `products:read`



## OpenAPI

````yaml get /v3/products/exports/{exportId}
openapi: 3.0.3
info:
  title: Snappy Public API v3
  version: 3.0.0
  contact:
    name: Snappy Support
    email: info@snappy.com
  description: >-
    Welcome to the Snappy API reference documentation!

    You can use this API to integrate with Snappy and spread smiles to your
    employees/clients/customers and much more.

    So let's get started!
servers:
  - url: https://api.snappy.com/public-api
    description: Base API URL
  - url: https://mtls-api.snappy.com/public-api
    description: >-
      ## mTLS URL

      You can also use mTLS to enhance your API security. To get your specific
      certificates please contact our support.

      Once you configure the certificated correctly, you need to also update
      endpoints to use the following secure api base URL:
security: []
tags:
  - name: Products
    description: >-
      Use these endpoints to retrieve products and tags for building catalog and
      browse experiences in your UI.
  - name: Collections
    description: >-
      Use these endpoints to retrieve products within curated collections for
      marketplace and browse experiences.
  - name: Variants
    description: >-
      Use these endpoints to retrieve variants, variant pricing, and country
      availability for orderable product SKUs.
  - name: Billing Methods
    description: >-
      A **Billing Method** is the funding source attached to an **Account** -
      for example, a Purchase Order (PO), Invoice, Prepay deposit, or Credit
      Card. Use these endpoints to retrieve billing method details such as
      remaining balance, status, and expiration.
  - name: Accounts
    description: >-
      An **Account** is a sub-entity within a **Company**, used to organize
      campaigns and gift sends. Use these endpoints to list, retrieve, and
      create accounts.
  - name: API Keys
    description: >-
      Use these endpoints to manage API keys for programmatic access. Key
      management requires company owner privileges.
  - name: Orders
    description: >-
      Use these endpoints to place, retrieve, cancel, and validate orders and
      shipping addresses.
paths:
  /v3/products/exports/{exportId}:
    get:
      tags:
        - Export
      summary: Get export status
      description: >-
        Use this endpoint to check the status of an asynchronous export job.
        Poll this endpoint after calling `POST /v3/products/exports` or `POST
        /v3/collections/exports` until the job reaches a terminal state
        (`completed` or `failed`).


        ###### Required parameters:

        - `exportId` - the export job identifier returned from the create call,
        passed as a path parameter.


        ###### Please note:

        - Status transitions: `pending` → `processing` → `completed` | `failed`.

        - When `status` is `completed`, the response includes a `downloadUrls`
        map of signed URLs keyed by file identifier (e.g. `"0"`) or location
        code (e.g. `"US"`). Download the file(s) before the export record
        expires (48 hours after creation).

        - When `status` is `failed`, the response includes an `errorMessage`
        describing the failure (e.g. `"Export timed out"`).

        - The same poll endpoint serves both product export jobs and collection
        export jobs - `exportId` is sufficient to look up either.

        - Returns `404` if the supplied `exportId` does not exist or the export
        record has expired.


        #### Permissions

        - Requires: `products:read`
      operationId: getProductsExportStatusAsyncV3
      parameters:
        - schema:
            type: string
            minLength: 1
            description: Export job identifier returned from `POST /v3/products/exports`.
            example: 6650a1b2c3d4e5f6a7b8c9d0
          required: true
          description: Export job identifier returned from `POST /v3/products/exports`.
          name: exportId
          in: path
        - schema:
            type: string
            description: Optional account identifier for swag validation/filtering.
            example: acc123456
          required: false
          description: Optional account identifier for swag validation/filtering.
          name: snappy-account-id
          in: header
        - schema:
            type: string
            description: Optional company identifier for swag validation/filtering.
            example: cmp123456
          required: false
          description: Optional company identifier for swag validation/filtering.
          name: snappy-company-id
          in: header
      responses:
        '200':
          description: Export job status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetProductsExportStatusAsyncV3Response'
              examples:
                pending:
                  value:
                    status: pending
                completed:
                  value:
                    status: completed
                    downloadUrls:
                      '0': https://s3.amazonaws.com/bucket/export-file.ndjson?...
                failed:
                  value:
                    status: failed
                    errorMessage: Export timed out
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseV3'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseV3'
        '404':
          description: >-
            Not Found - Supplied `exportId` does not exist or the export record
            has expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseV3'
              example:
                message: Export not found.
                errorCode: 404_EXPORT_003
      security:
        - ApiKeyAuthentication: []
components:
  schemas:
    GetProductsExportStatusAsyncV3Response:
      type: object
      properties:
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
          description: >-
            Current export job state. Transitions: `pending` → `processing` →
            `completed` | `failed`.
        downloadUrls:
          type: object
          additionalProperties:
            type: string
          description: >-
            Present only when `status` is `completed`. Map of signed download
            URLs keyed by file identifier (e.g. `"0"`) or location code (e.g.
            `"US"`). Download before the export record expires (48 hours).
        errorMessage:
          type: string
          description: >-
            Present only when `status` is `failed`. Human-readable failure
            reason (e.g. "Export timed out").
      required:
        - status
      description: >-
        Status of an asynchronous export job. When `completed`, includes signed
        `downloadUrls`; when `failed`, includes `errorMessage`.
    ErrorResponseV3:
      type: object
      properties:
        message:
          type: string
          description: Human-readable error message.
          example: Product not found.
        errorCode:
          type: string
          description: Structured error code.
          example: 404_PROD_001
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
                example: Product with id 'q1w2e3r4t5' was not found
              path:
                type: string
                description: Dot-separated path to the field that caused the error.
                example: pathParameters.productId
              errorCode:
                type: string
                example: 404_PROD_001
            required:
              - message
              - path
          description: Optional field-level error details.
      required:
        - message
        - errorCode
      description: Standard v3 error envelope.
  securitySchemes:
    ApiKeyAuthentication:
      type: apiKey
      in: header
      name: X-Api-Key
      description: |-
        ## Company Level Authentication

        Include your API key in the `X-Api-Key` header for every request:
        ```
        X-Api-Key: YOUR_API_KEY
        ```

````