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

# List the recalls that notified a product's subscribers

> One row per recall that sent notices to this product's subscribers, newest first, with delivered and queued counts. Paginated. 404 for a product the organization does not own.



## OpenAPI

````yaml /openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/notice-audit/recalls
openapi: 3.1.0
info:
  title: Brand Dashboard API
  version: 1.0.0
  description: >
    Endpoints powering the brand dashboard: catalogue completeness, product
    images, nutrition and document management, brand analytics, data export, and
    GS1 Company Prefix management + self-service GIAI minting. Every endpoint is
    scoped to an organization you are a member of — pass an org-scoped API key,
    or authenticate with a session, and you reach exactly the organizations your
    account belongs to. This is the same surface the Closient dashboard UI
    itself uses, so anything you can do in the dashboard you can do here.


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


    Those windows are per key. Your plan also caps each organization per hour,
    across every key,

    login and session acting for it: 100 requests on Free (or while a
    subscription is lapsed),

    10,000 on Business. While a subscription is lapsed, any method other than
    `GET`, `HEAD` and

    `OPTIONS` returns `403`.


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


    ## Versioning and Deprecation


    Every response from an operation in this document carries
    `Closient-API-Version` (its `info.version`).

    An operation marked `deprecated` answers with `Deprecation: @<Unix seconds>`

    ([RFC 9745](https://www.rfc-editor.org/rfc/rfc9745)), `Sunset: <HTTP-date>`
    once a

    retirement date is set ([RFC 8594](https://www.rfc-editor.org/rfc/rfc8594)),
    and

    `Link` entries for `rel="deprecation"`, `rel="sunset"` and
    `rel="successor-version"`.

    After its sunset it answers `410 Gone` naming the replacement. Policy:

    https://docs.closient.com/api-versioning
  termsOfService: https://www.closient.com/terms/
servers:
  - url: https://www.closient.com
security: []
externalDocs:
  description: Closient Documentation
  url: https://docs.closient.com
paths:
  /dashboard/api/v1/products/{organization_id}/{gtin}/notice-audit/recalls:
    get:
      tags:
        - Product Ledgers
      summary: List the recalls that notified a product's subscribers
      description: >-
        One row per recall that sent notices to this product's subscribers,
        newest first, with delivered and queued counts. Paginated. 404 for a
        product the organization does not own.
      operationId: product_notice_recalls
      parameters:
        - in: path
          name: organization_id
          schema:
            description: UUID of the organization that owns the product.
            format: shortuuid
            maxLength: 22
            minLength: 22
            pattern: ^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$
            title: Organization Id
            type: string
          required: true
          description: UUID of the organization that owns the product.
        - in: path
          name: gtin
          schema:
            description: >-
              GTIN-8/12/13/14 of the product. Normalized to GTIN-14 by
              zero-padding before lookup.
            format: gtin
            maxLength: 14
            minLength: 8
            pattern: ^[0-9]{8}$|^[0-9]{12,14}$
            title: Gtin
            type: string
          required: true
          description: >-
            GTIN-8/12/13/14 of the product. Normalized to GTIN-14 by
            zero-padding before lookup.
        - in: query
          name: page
          schema:
            default: 1
            description: Page number (1-indexed).
            maximum: 10000000
            minimum: 1
            title: Page
            type: integer
          required: false
          description: Page number (1-indexed).
        - in: query
          name: page_size
          schema:
            default: 25
            description: Number of items per page (max 100).
            maximum: 100
            minimum: 1
            title: Page Size
            type: integer
          required: false
          description: Number of items per page (max 100).
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedRecallNoticeRowOut'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '405':
          description: Method Not Allowed
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '422':
          description: Unprocessable Content
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '429':
          description: Too Many Requests
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
      security:
        - APIKeyHeaderAuth: []
        - OAuthTokenAuth: []
        - CookieGatedSessionAuth: []
components:
  schemas:
    PagedRecallNoticeRowOut:
      properties:
        data:
          description: >-
            Items on the current page, each conforming to the endpoint's item
            schema. Empty when the result set is empty or ``page`` is past the
            end.
          items:
            $ref: '#/components/schemas/RecallNoticeRowOut'
          title: Data
          type: array
        pagination:
          $ref: '#/components/schemas/PaginationMeta'
          description: Pagination envelope describing position within the full result set.
      required:
        - data
        - pagination
      title: PagedRecallNoticeRowOut
      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
    RecallNoticeRowOut:
      description: Delivery record of one recall that notified a product's subscribers.
      examples:
        - delivered_count: 110
          first_delivered_at: '2026-10-12T09:00:00Z'
          last_delivered_at: '2026-10-12T09:40:00Z'
          notice_type: RECALL
          queued_count: 0
          recall_date: '2026-10-12'
          recall_event_id: 3Hk9XvT2nQpLw8RcYd5mZa
          title: Voluntary recall of lot L2026-10A
      properties:
        recall_event_id:
          description: >-
            URL-safe 22-character shortuuid encoding of the row's UUID primary
            key. Stable across the row's lifetime; suitable for sharing in URLs,
            log lines, and external SDK clients. Accepted on input as either the
            shortuuid form or the canonical UUID form
            (``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``).
          format: shortuuid
          maxLength: 22
          minLength: 22
          pattern: ^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$
          title: Recall Event Id
          type: string
        title:
          description: Recall title.
          examples:
            - Voluntary recall of lot L2026-10A
          title: Title
          type: string
        notice_type:
          $ref: '#/components/schemas/RecallNoticeTypeEnum'
          description: Kind of notice.
          examples:
            - RECALL
        recall_date:
          anyOf:
            - format: date
              type: string
            - type: 'null'
          description: Date the recall was issued, when known.
          title: Recall Date
        delivered_count:
          description: Notices delivered to subscribers.
          examples:
            - 110
          minimum: 0
          title: Delivered Count
          type: integer
        queued_count:
          description: Notices queued but not delivered yet.
          examples:
            - 0
          minimum: 0
          title: Queued Count
          type: integer
        first_delivered_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the first notice was delivered.
          title: First Delivered At
        last_delivered_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the last notice was delivered.
          title: Last Delivered At
      required:
        - recall_event_id
        - title
        - notice_type
        - delivered_count
        - queued_count
      title: RecallNoticeRowOut
      type: object
    PaginationMeta:
      description: >-
        Page envelope returned alongside ``data`` on every paginated list
        endpoint.
      examples:
        - has_next: true
          has_previous: false
          page: 1
          page_size: 25
          total_count: 342
          total_pages: 14
      properties:
        page:
          description: >-
            1-indexed page number that was returned. Echoes the ``?page=`` query
            parameter.
          examples:
            - 1
          minimum: 1
          title: Page
          type: integer
        page_size:
          description: >-
            Number of items returned in ``data`` for this page. Capped at the
            endpoint's maximum page size (typically 100).
          examples:
            - 25
          minimum: 1
          title: Page Size
          type: integer
        total_count:
          description: Total number of items matching the query across all pages.
          examples:
            - 342
          minimum: 0
          title: Total Count
          type: integer
        total_pages:
          description: >-
            Total number of pages at the current ``page_size``. Always at least
            1 (an empty result still reports ``total_pages: 1``).
          examples:
            - 14
          minimum: 1
          title: Total Pages
          type: integer
        has_next:
          description: >-
            True when ``page < total_pages`` — clients can request
            ``page=page+1`` to continue.
          examples:
            - true
          title: Has Next
          type: boolean
        has_previous:
          description: >-
            True when ``page > 1`` — clients can request ``page=page-1`` to go
            back.
          examples:
            - false
          title: Has Previous
          type: boolean
      required:
        - page
        - page_size
        - total_count
        - total_pages
        - has_next
        - has_previous
      title: PaginationMeta
      type: object
    RecallNoticeTypeEnum:
      description: What kind of notice a recall event is.
      enum:
        - RECALL
        - WITHDRAWAL
        - SAFETY_ALERT
      title: RecallNoticeTypeEnum
      type: string
  securitySchemes:
    APIKeyHeaderAuth:
      type: apiKey
      in: header
      name: X-API-Key
    OAuthTokenAuth:
      type: http
      scheme: bearer
    CookieGatedSessionAuth:
      type: apiKey
      in: cookie
      name: sessionid

````

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