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

# List certificates

> Lists your customers' exemption certificates, newest first. Page with `limit` + `starting_after` (pass the last certificate's `id`). Filters combine with AND; repeat a filter to match any of several values. Certificates of deleted customers, and emailed certificates not yet matched to a customer, are left out.

Lists the exemption certificates on file for your customers, newest first, including those still in review or rejected.

* Filters combine with AND. Repeat a filter to match any of its values, for example `?status=needs_review&status=rejected`.
* `jurisdiction` also matches places under it: `USA.S-IL` finds a certificate that covers `USA.S-IL.M-CHICAGO`.
* `status` combines the review and the dates. `needs_review` and `rejected` certificates exempt nothing, whatever their dates say. Treat the list of values as open, because Taxwire can add more.
* Certificates of deleted customers, and emailed certificates not yet linked to a customer, are left out.

See [Listing certificates](https://apidocs.taxwire.com/api-reference/guides/exemptions.md#listing-certificates) for examples.


## OpenAPI

````yaml GET /certificates
openapi: 3.1.0
info:
  title: Taxwire Public API
  version: 0.1.0
servers: []
security: []
paths:
  /certificates:
    get:
      tags:
        - Certificates
      summary: List Certificates
      description: >-
        Lists your customers' exemption certificates, newest first. Page with
        `limit` + `starting_after` (pass the last certificate's `id`). Filters
        combine with AND; repeat a filter to match any of several values.
        Certificates of deleted customers, and emailed certificates not yet
        matched to a customer, are left out.
      operationId: list_certificates_certificates_get
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 1000
            minimum: 1
            description: Page size, between 1 and 1000.
            default: 100
            title: Limit
          description: Page size, between 1 and 1000.
        - name: starting_after
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Return certificates after this one. Pass the `id` of the last
              certificate from the previous page to fetch the next page.
            title: Starting After
          description: >-
            Return certificates after this one. Pass the `id` of the last
            certificate from the previous page to fetch the next page.
        - name: customer_id
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 100
              - type: 'null'
            description: >-
              Only certificates belonging to these customers. At most 100
              values.
            title: Customer Id
          description: Only certificates belonging to these customers. At most 100 values.
        - name: exemption_type
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                  enum:
                    - agriculture
                    - direct_pay
                    - driveaway
                    - govt_exempt_org
                    - manufacturing
                    - resale
                    - other
              - type: 'null'
            description: Only certificates with these exemption types.
            title: Exemption Type
          description: Only certificates with these exemption types.
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                  enum:
                    - valid
                    - expired
                    - not_yet_active
                    - needs_review
                    - rejected
              - type: 'null'
            description: Only certificates with these statuses.
            title: Status
          description: Only certificates with these statuses.
        - name: jurisdiction
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 100
              - type: 'null'
            description: >-
              Only certificates covering these jurisdictions, given as political
              paths. A path also matches the jurisdictions under it: `USA.S-IL`
              matches a certificate for `USA.S-IL.M-CHICAGO`. At most 100
              values.
            title: Jurisdiction
          description: >-
            Only certificates covering these jurisdictions, given as political
            paths. A path also matches the jurisdictions under it: `USA.S-IL`
            matches a certificate for `USA.S-IL.M-CHICAGO`. At most 100 values.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CertificatesListResponse'
        '422':
          description: Validation Error - Invalid query parameter
          content:
            application/json:
              example:
                errors:
                  - status: '422'
                    code: validation_error
                    title: Validation Error
                    detail: >-
                      Input should be 'valid', 'expired', 'not_yet_active',
                      'needs_review' or 'rejected'
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                errors:
                  - status: '429'
                    code: rate_limit_error
                    title: Too Many Requests
                    detail: Rate limit exceeded
          headers:
            Retry-After:
              schema:
                type: string
              description: Time in seconds until the rate limit resets
            X-RateLimit-Limit:
              schema:
                type: string
              description: The rate limit ceiling for the given request
            X-RateLimit-Remaining:
              schema:
                type: string
              description: The number of requests remaining in the time window
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                errors:
                  - status: '500'
                    code: system_internal_error
                    title: Internal Error
                    detail: An unexpected error occurred. Our team has been notified.
      security:
        - APIKeyHeader: []
        - HTTPBearer: []
components:
  schemas:
    CertificatesListResponse:
      properties:
        object:
          type: string
          title: Object
          default: list
        url:
          type: string
          title: Url
          default: /certificates
        has_more:
          type: boolean
          title: Has More
          description: More results available
          examples:
            - true
            - false
        data:
          items:
            $ref: '#/components/schemas/CertificateResource'
          type: array
          title: Data
          description: A page of certificates, newest first.
      type: object
      required:
        - has_more
      title: CertificatesListResponse
      description: List envelope for GET /certificates, cursor-paged by `id`.
    ErrorResponse:
      properties:
        errors:
          items:
            $ref: '#/components/schemas/Error'
          type: array
          title: Errors
      type: object
      required:
        - errors
      title: ErrorResponse
      description: Standardized JSON:API error response model.
    CertificateResource:
      properties:
        id:
          type: string
          title: Id
          description: Unique identifier for the certificate.
          examples:
            - cexc_01J9Z8Q4E7K2M3N4P5R6S7T8U9
        customer_id:
          type: string
          title: Customer Id
          description: The customer the certificate belongs to.
          examples:
            - cust_01J9Z8Q4E7K2M3N4P5R6S7T8U9
        exemption_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Exemption Number
          description: The exemption or registration number on the certificate.
          examples:
            - SR-1234567
        exemption_type:
          anyOf:
            - type: string
              enum:
                - agriculture
                - direct_pay
                - driveaway
                - govt_exempt_org
                - manufacturing
                - resale
                - other
            - type: 'null'
          description: >-
            The kind of exemption the certificate claims. Null only on a
            `needs_review` certificate whose type is not filled in yet.
          examples:
            - resale
        exemption_type_other:
          anyOf:
            - type: string
            - type: 'null'
          title: Exemption Type Other
          description: >-
            The certificate's own description of the exemption. Set only when
            `exemption_type` is `other`.
          examples:
            - null
            - Tribal sales
        jurisdictions:
          items:
            $ref: '#/components/schemas/CertificateJurisdiction'
          type: array
          title: Jurisdictions
          description: The jurisdictions the certificate covers.
        status:
          type: string
          description: >-
            `valid`: approved and in its date window today (UTC). `expired`:
            approved and its expiration date has passed. `not_yet_active`:
            approved and its start date is in the future. `needs_review`: not
            reviewed yet, so it exempts nothing. `rejected`: reviewed and turned
            down, so it exempts nothing. More values may be added; treat an
            unknown one as not valid.
          examples:
            - valid
        review_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Review Reason
          description: Why the certificate was rejected. Null otherwise.
          examples:
            - null
            - Certificate is unsigned
        starts_at:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Starts At
          description: >-
            The first day the certificate covers. Null only on a `needs_review`
            certificate whose start date is not filled in yet.
          examples:
            - '2025-04-01'
        expires_at:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Expires At
          description: The last day the certificate covers. Null when it never expires.
          examples:
            - '2027-03-31'
            - null
        created_at:
          type: string
          format: date-time
          title: Created At
          description: Date at which the certificate was created in Taxwire.
          examples:
            - '2026-09-14T20:00:00Z'
        updated_at:
          type: string
          format: date-time
          title: Updated At
          description: Date at which the certificate was last updated.
          examples:
            - '2026-09-14T20:00:00Z'
      additionalProperties: false
      type: object
      required:
        - id
        - customer_id
        - jurisdictions
        - status
        - created_at
        - updated_at
      title: CertificateResource
      description: An exemption certificate on file for one of your customers.
    Error:
      properties:
        status:
          type: string
          title: Status
        code:
          type: string
          title: Code
        title:
          type: string
          title: Title
        detail:
          type: string
          title: Detail
        source:
          anyOf:
            - $ref: '#/components/schemas/ErrorSource'
            - type: 'null'
        meta:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Meta
      type: object
      required:
        - status
        - code
        - title
        - detail
      title: Error
      description: Individual JSON:API error object.
    CertificateJurisdiction:
      properties:
        jurisdiction:
          type: string
          title: Jurisdiction
          description: >-
            The jurisdiction's political path: a US state (`USA.S-CA`), a city
            (`USA.S-IL.M-CHICAGO`), a Canadian province (`CAN.P-ON`) or a
            country code.
          examples:
            - USA.S-CA
        jurisdiction_name:
          type: string
          title: Jurisdiction Name
          description: The jurisdiction's readable name.
          examples:
            - California
      additionalProperties: false
      type: object
      required:
        - jurisdiction
        - jurisdiction_name
      title: CertificateJurisdiction
      description: One jurisdiction a certificate covers.
    ErrorSource:
      properties:
        pointer:
          anyOf:
            - type: string
            - type: 'null'
          title: Pointer
      type: object
      title: ErrorSource
      description: Identifies the source of the error, e.g., via a JSON Pointer.
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
    HTTPBearer:
      type: http
      scheme: bearer

````

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