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

# Enqueue an FSMA 204 traceability export for one lot

> FSMA 204 § 1.1455(c) requires records be furnished to FDA within 24 hours of request. This endpoint enqueues an async export of all CriticalTrackingEvents for the given lot — ``forward`` (downstream), ``backward`` (upstream), or ``both`` — and returns a TraceabilityExportJob with a ``short_id``. When the job completes a short-lived signed S3 URL is delivered (poll with the same endpoint or check the compliance dashboard at ``/compliance/``). The full FDA Sortable Spreadsheet template (per-CTE sheets) lands with C-2472; this endpoint emits a minimal single-sheet KDE workbook in the meantime. Returns ``202 Accepted`` for the standard async path and ``200 OK`` when the job completed synchronously (e.g. eager-mode test runs). Caller must hold OWNER or MANAGER on the organization that owns the lot's brand; other orgs receive ``404`` (no leak of lot existence).



## OpenAPI

````yaml /openapi/openapi-epcis.json get /epcis/api/2.0/traceability/lots/{lot_id}/fda-export
openapi: 3.1.0
info:
  title: EPCIS 2.0 API
  version: 2.0.0
  description: >
    GS1-conformant EPCIS 2.0 event capture and query API.


    ## Authentication


    All endpoints require an API key passed via the `X-API-Key` HTTP header,
    unless otherwise noted.


    ```

    X-API-Key: csb_<body>_<checksum>

    ```


    Generate API keys in **Settings > API Keys** in your dashboard, or via the
    Account API.

    Session-based (cookie) authentication is also accepted for browser-based
    access.


    ## Rate Limits


    | Tier        | Requests / minute | Requests / day |

    |-------------|-------------------|----------------|

    | Default     | 300               | 10,000         |

    | Custom      | Contact us        | Contact us     |


    Rate-limit headers are included on every response so callers can
    self-throttle without

    hitting our 429s ("informed governor"):


    - `RateLimit-Policy` — every active window, e.g. `300;w=60, 10000;w=86400`

    - `RateLimit-Limit` — quota for the **most-restrictive** currently-active
    window

    - `RateLimit-Remaining` — requests left in that window

    - `RateLimit-Reset` — seconds until that window resets (relative; clock-skew
    safe)


    Legacy `X-RateLimit-*` aliases are also emitted for back-compat.
    `X-RateLimit-Reset`

    keeps the absolute Unix-timestamp shape to avoid breaking existing
    consumers.


    When rate-limited, you receive `429 Too Many Requests` with a
    `retry_after_seconds` field

    in the error envelope and a `Retry-After` header.


    ## Pagination


    List endpoints return paginated results in this envelope:


    ```json

    {
      "data": [...],
      "pagination": {
        "page": 1,
        "page_size": 25,
        "total_count": 342,
        "total_pages": 14,
        "has_next": true,
        "has_previous": false
      }
    }

    ```


    Use `?page=2&page_size=50` query parameters. Maximum page size is 100.


    ## Error Responses


    All errors conform to [RFC 9457 Problem
    Details](https://www.rfc-editor.org/rfc/rfc9457)

    with `Content-Type: application/problem+json`:


    ```json

    {
      "type": "https://closient.com/docs/errors/not_found",
      "title": "Not Found",
      "status": 404,
      "detail": "The requested resource was not found.",
      "error_code": "not_found",
      "retryable": false,
      "timestamp": "2026-03-31T12:00:00+00:00"
    }

    ```


    Common error codes: `unauthorized` (401), `forbidden` (403), `not_found`
    (404),

    `validation_error` (422), `rate_limited` (429), `internal_error` (500).
  termsOfService: https://www.closient.com/terms/
servers:
  - url: https://www.closient.com
security: []
externalDocs:
  description: Closient Documentation
  url: https://docs.closient.com
paths:
  /epcis/api/2.0/traceability/lots/{lot_id}/fda-export:
    get:
      tags:
        - EPCIS 2.0
      summary: Enqueue an FSMA 204 traceability export for one lot
      description: >-
        FSMA 204 § 1.1455(c) requires records be furnished to FDA within 24
        hours of request. This endpoint enqueues an async export of all
        CriticalTrackingEvents for the given lot — ``forward`` (downstream),
        ``backward`` (upstream), or ``both`` — and returns a
        TraceabilityExportJob with a ``short_id``. When the job completes a
        short-lived signed S3 URL is delivered (poll with the same endpoint or
        check the compliance dashboard at ``/compliance/``). The full FDA
        Sortable Spreadsheet template (per-CTE sheets) lands with C-2472; this
        endpoint emits a minimal single-sheet KDE workbook in the meantime.
        Returns ``202 Accepted`` for the standard async path and ``200 OK`` when
        the job completed synchronously (e.g. eager-mode test runs). Caller must
        hold OWNER or MANAGER on the organization that owns the lot's brand;
        other orgs receive ``404`` (no leak of lot existence).
      operationId: apps_epcis_api_epcis_traceability_lot_fda_export
      parameters:
        - in: path
          name: lot_id
          schema:
            description: >-
              Short ID of the ``ProductLot`` to export — 22-character shortuuid
              encoding of the lot's UUID primary key.
            maxLength: 22
            minLength: 22
            title: Lot Id
            type: string
          required: true
          description: >-
            Short ID of the ``ProductLot`` to export — 22-character shortuuid
            encoding of the lot's UUID primary key.
        - in: query
          name: direction
          schema:
            allOf:
              - description: >-
                  Traversal direction for a lot traceability export.


                  Mirrors
                  :class:`apps.compliance.models.TraceabilityExportJob.Direction`.

                  ``forward`` walks downstream CriticalTrackingEvents (where did
                  this

                  lot ship?); ``backward`` walks upstream CTEs (where did this
                  lot

                  come from?); ``both`` does a full bidirectional traversal —
                  the

                  default for FSMA 204 § 1.1455(c) requests.
                enum:
                  - forward
                  - backward
                  - both
                title: TraceabilityDirectionEnum
                type: string
            default: both
            description: >-
              Traversal direction. ``forward`` (downstream) walks where the lot
              has been shipped; ``backward`` (upstream) walks where the lot came
              from; ``both`` does a full bidirectional traversal (default —
              matches the FSMA 204 § 1.1455(c) shape).
          required: false
          description: >-
            Traversal direction. ``forward`` (downstream) walks where the lot
            has been shipped; ``backward`` (upstream) walks where the lot came
            from; ``both`` does a full bidirectional traversal (default —
            matches the FSMA 204 § 1.1455(c) shape).
        - in: query
          name: format
          schema:
            allOf:
              - description: >-
                  Output file format for a lot traceability export.


                  Mirrors
                  :class:`apps.compliance.models.TraceabilityExportJob.Format`.

                  Only ``xlsx`` (Excel workbook) is currently supported; matches
                  the

                  FDA Sortable Spreadsheet template format (per-CTE sheets,
                  lands with

                  C-2472).
                enum:
                  - xlsx
                title: TraceabilityFormatEnum
                type: string
            default: xlsx
            description: >-
              Output file format. Only ``xlsx`` (Excel workbook) is currently
              supported; matches the FDA Sortable Spreadsheet template.
          required: false
          description: >-
            Output file format. Only ``xlsx`` (Excel workbook) is currently
            supported; matches the FDA Sortable Spreadsheet template.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TraceabilityExportEnqueuedSchema'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TraceabilityExportEnqueuedSchema'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '422':
          description: Unprocessable Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
      security:
        - APIKeyHeaderAuth: []
        - OAuthTokenAuth: []
        - SessionAuth: []
components:
  schemas:
    TraceabilityExportEnqueuedSchema:
      description: 202 response body for an enqueued lot traceability export.
      examples:
        - direction: both
          format: xlsx
          job_short_id: keATfB8VP2gSjcnTbsMNQL
          lot_id: aQ4nF7zG3kmRtXp9LcWyVH
          requested_at: '2026-05-03T21:00:00Z'
          status: pending
      properties:
        job_short_id:
          description: >-
            Short ID of the ``TraceabilityExportJob`` — a 22-character shortuuid
            encoding of the underlying UUID primary key. Poll the same endpoint
            with the same lot to observe status transitions, or look it up
            directly on the compliance dashboard at ``/compliance/``.
          maxLength: 22
          minLength: 22
          title: Job Short Id
          type: string
        status:
          $ref: '#/components/schemas/TraceabilityStatusEnum'
          description: >-
            Lifecycle status of the export job. Progresses ``pending`` →
            ``processing`` → ``delivered`` (terminal success) or ``pending`` →
            ``processing`` → ``failed`` (terminal failure). A delivered job is
            immutable except for ``download_count``.
        lot_id:
          description: >-
            Short ID of the ``ProductLot`` whose traceability chain was queued —
            echoed from the path parameter for client-side correlation.
            22-character shortuuid encoding.
          maxLength: 22
          minLength: 22
          title: Lot Id
          type: string
        direction:
          $ref: '#/components/schemas/TraceabilityDirectionEnum'
          description: >-
            Traversal direction. ``forward`` walks downstream
            CriticalTrackingEvents (where did this lot ship?); ``backward``
            walks upstream CTEs (where did this lot come from?); ``both`` does a
            full bidirectional traversal — the default for FSMA 204 § 1.1455(c)
            requests.
        format:
          $ref: '#/components/schemas/TraceabilityFormatEnum'
          description: >-
            Output file format. Only ``xlsx`` (Excel workbook) is currently
            supported; matches the FDA Sortable Spreadsheet template format.
        requested_at:
          description: >-
            ISO-8601 / RFC 3339 timestamp marking when the job was enqueued.
            Used by the FSMA 204 § 1.1455(c) 24-hour SLA: `delivered_at -
            requested_at` must stay under 24h for the org to remain in
            compliance.
          title: Requested At
          type: string
        signed_download_url:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Short-lived signed S3 URL for the rendered XLSX, populated only when
            the job has reached ``status='delivered'``. Always ``null`` while
            ``pending`` or ``processing``, and on terminal ``failed`` status.
          title: Signed Download Url
      required:
        - job_short_id
        - status
        - lot_id
        - direction
        - format
        - requested_at
      title: TraceabilityExportEnqueuedSchema
      type: object
    ErrorOut:
      description: |-
        RFC 9457 Problem Details response.

        All API errors are returned in this format with Content-Type:
        application/problem+json.
      examples:
        - detail: The requested resource was not found.
          error_code: not_found
          retryable: false
          status: 404
          timestamp: '2026-03-31T12:00:00+00:00'
          title: Not Found
          type: https://closient.com/docs/errors/not_found
        - detail: Validation error.
          details:
            - loc:
                - body
                - name
              msg: Field required
              type: missing
          error_code: validation_error
          retryable: false
          status: 422
          timestamp: '2026-03-31T12:00:00+00:00'
          title: Validation Error
          type: https://closient.com/docs/errors/validation_error
        - detail: Rate limit exceeded. Please try again later.
          error_code: rate_limited
          retry_after: 31
          retryable: true
          status: 429
          timestamp: '2026-03-31T12:00:00+00:00'
          title: Rate Limited
          type: https://closient.com/docs/errors/rate_limited
      properties:
        type:
          description: URI reference identifying the error type.
          title: Type
          type: string
        title:
          description: Short human-readable summary of the error.
          title: Title
          type: string
        status:
          description: HTTP status code.
          title: Status
          type: integer
        detail:
          description: Human-readable explanation of this specific occurrence.
          title: Detail
          type: string
        error_code:
          description: Machine-readable error code (e.g. not_found, unauthorized).
          title: Error Code
          type: string
        retryable:
          default: false
          description: Whether retrying the same request can succeed.
          title: Retryable
          type: boolean
        timestamp:
          description: ISO 8601 timestamp of when the error occurred.
          title: Timestamp
          type: string
        retry_after:
          anyOf:
            - type: integer
            - type: 'null'
          description: Seconds to wait before retrying (when applicable).
          title: Retry After
        owner_action_required:
          anyOf:
            - type: boolean
            - type: 'null'
          description: Whether the error requires account owner intervention.
          title: Owner Action Required
        details:
          description: Additional context (validation errors, etc.).
          title: Details
      required:
        - type
        - title
        - status
        - detail
        - error_code
        - timestamp
      title: ErrorOut
      type: object
    TraceabilityStatusEnum:
      description: |-
        Lifecycle status for a TraceabilityExportJob.

        Mirrors :class:`apps.compliance.models.TraceabilityExportJob.Status`.
        Jobs progress ``pending`` → ``processing`` → ``delivered`` (terminal
        success) or ``pending`` → ``processing`` → ``failed`` (terminal
        failure). A delivered job is immutable except for ``download_count``.
      enum:
        - pending
        - processing
        - delivered
        - failed
      title: TraceabilityStatusEnum
      type: string
    TraceabilityDirectionEnum:
      description: |-
        Traversal direction for a lot traceability export.

        Mirrors :class:`apps.compliance.models.TraceabilityExportJob.Direction`.
        ``forward`` walks downstream CriticalTrackingEvents (where did this
        lot ship?); ``backward`` walks upstream CTEs (where did this lot
        come from?); ``both`` does a full bidirectional traversal — the
        default for FSMA 204 § 1.1455(c) requests.
      enum:
        - forward
        - backward
        - both
      title: TraceabilityDirectionEnum
      type: string
    TraceabilityFormatEnum:
      description: |-
        Output file format for a lot traceability export.

        Mirrors :class:`apps.compliance.models.TraceabilityExportJob.Format`.
        Only ``xlsx`` (Excel workbook) is currently supported; matches the
        FDA Sortable Spreadsheet template format (per-CTE sheets, lands with
        C-2472).
      enum:
        - xlsx
      title: TraceabilityFormatEnum
      type: string
  securitySchemes:
    APIKeyHeaderAuth:
      type: apiKey
      in: header
      name: X-API-Key
    OAuthTokenAuth:
      type: http
      scheme: bearer
    SessionAuth:
      type: apiKey
      in: cookie
      name: sessionid

````