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

# Retrieve a SAT catalog

> Return every code + description for one SAT catalog — the exact values to send in invoice fields like `payment_form` (c_FormaPago), `payment_method` (c_MetodoPago), `use` (c_UsoCFDI) and `tax_regime` (c_RegimenFiscal). Filter uso_cfdi / tax_regimes by taxpayer type with `?persona=fisica|moral`. Public — no API key required.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/catalogs/{catalog}
openapi: 3.1.0
info:
  title: Invoice API
  description: >-
    Mexican CFDI 4.0 invoicing API. Versioned via the Invoice-Version header;
    current: 2026-07-15. See GET /v1/versions.
  version: 0.1.0
servers:
  - url: https://api.newinvoice.dev
    description: Production
  - url: http://localhost:3000
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: api_keys
    description: Platform API-key lifecycle (create, list, revoke)
  - name: accounts
    description: 'Connect: platform-owned connected accounts (multi-tenant)'
  - name: fiscal_profiles
    description: Emitter RFC + CSD/FIEL registration
  - name: invoices
    description: Create, stamp, cancel CFDI 4.0 invoices
  - name: validations
    description: Validate arbitrary CFDI XML
  - name: downloads
    description: SAT descarga masiva jobs
  - name: webhook_endpoints
    description: HMAC-signed event delivery
  - name: events
    description: Event log
  - name: balance
    description: Remaining stamp credits
  - name: usage
    description: Metered usage records (stamps consumed)
  - name: catalogs
    description: SAT reference catalogs (uso CFDI, payment forms/methods, tax regimes, …)
  - name: docs
    description: Served documentation (error catalog + guides)
paths:
  /v1/catalogs/{catalog}:
    get:
      tags:
        - catalogs
      summary: Retrieve a SAT catalog
      description: >-
        Return every code + description for one SAT catalog — the exact values
        to send in invoice fields like `payment_form` (c_FormaPago),
        `payment_method` (c_MetodoPago), `use` (c_UsoCFDI) and `tax_regime`
        (c_RegimenFiscal). Filter uso_cfdi / tax_regimes by taxpayer type with
        `?persona=fisica|moral`. Public — no API key required.
      parameters:
        - schema:
            type: string
            enum:
              - fisica
              - moral
          in: query
          name: persona
          required: false
          description: >-
            Filter to codes valid for this taxpayer type. Only affects uso_cfdi
            and tax_regimes; ignored for catalogs without a persona restriction.
        - schema:
            type: string
            minLength: 1
          in: path
          name: catalog
          required: true
          description: >-
            Catalog slug, e.g. "payment_forms". GET /v1/catalogs lists every
            valid slug.
        - $ref: '#/components/parameters/InvoiceVersion'
        - $ref: '#/components/parameters/InvoiceAccount'
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    description: Always "list".
                    enum:
                      - list
                  url:
                    description: The path this catalog was requested from.
                    type: string
                  catalog:
                    type: string
                    enum:
                      - uso_cfdi
                      - payment_forms
                      - payment_methods
                      - tax_regimes
                      - invoice_types
                      - taxes
                      - tax_objects
                      - relation_types
                      - export_types
                      - periodicities
                      - currencies
                    description: The catalog slug returned.
                  sat_catalog:
                    type: string
                    description: Official SAT catalog name, e.g. "c_FormaPago".
                  name:
                    type: string
                    description: Human-readable catalog name.
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                          description: The SAT code to send in the request, e.g. "03".
                        description:
                          description: >-
                            Human-readable meaning of the code (Spanish, as
                            published by the SAT).
                          type: string
                        personas:
                          description: >-
                            Taxpayer types this code is valid for. Present for
                            uso_cfdi and tax_regimes; absent otherwise.
                          type: array
                          items:
                            type: string
                            enum:
                              - fisica
                              - moral
                            description: >-
                              Taxpayer type: "fisica" (persona física) or
                              "moral" (persona moral).
                        decimals:
                          description: >-
                            Decimal places the currency uses (c_Moneda). Present
                            for the currencies catalog.
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                      required:
                        - code
                      additionalProperties: false
                    description: Every entry in the catalog (or the persona subset).
                  has_more:
                    type: boolean
                    description: Always false — catalogs are returned whole, not paginated.
                required:
                  - object
                  - catalog
                  - sat_catalog
                  - name
                  - data
                  - has_more
                additionalProperties: false
              example:
                object: list
                url: https://example.com/webhooks/invoice
                catalog: uso_cfdi
                sat_catalog: string
                name: string
                data:
                  - code: string
                    description: string
                    personas:
                      - fisica
                    decimals: -9007199254740991
                has_more: true
          headers:
            Request-Id:
              $ref: '#/components/headers/RequestId'
            Invoice-Version:
              $ref: '#/components/headers/InvoiceVersionResponse'
            traceparent:
              $ref: '#/components/headers/Traceparent'
        '401':
          description: Missing or invalid API key.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://errors.invoiceapi.mx/auth_unauthorized
                title: Authentication required
                status: 401
                code: auth.unauthorized
                detail: Missing or invalid API key.
                remediation: >-
                  Send `Authorization: Bearer sk_test_...` (or sk_live_...) with
                  a valid API key.
                doc_url: /docs/errors#auth-unauthorized
                request_id: req_2P9K3sample
          headers:
            Request-Id:
              $ref: '#/components/headers/RequestId'
            Invoice-Version:
              $ref: '#/components/headers/InvoiceVersionResponse'
            traceparent:
              $ref: '#/components/headers/Traceparent'
        '404':
          description: Resource not found in this org + mode.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://errors.invoiceapi.mx/resource_not_found
                title: Resource not found
                status: 404
                code: resource.not_found
                detail: No such id in this org + mode.
                remediation: >-
                  Verify the id and that the key mode (test/live) matches the
                  id.
                doc_url: /docs/errors#resource-not_found
                request_id: req_2P9K3sample
          headers:
            Request-Id:
              $ref: '#/components/headers/RequestId'
            Invoice-Version:
              $ref: '#/components/headers/InvoiceVersionResponse'
            traceparent:
              $ref: '#/components/headers/Traceparent'
        '422':
          description: Request validation failed.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://errors.invoiceapi.mx/request_validation_failed
                title: Request validation failed
                status: 422
                code: request.validation_failed
                detail: One or more fields did not satisfy the schema.
                remediation: Fix the fields listed in `errors` and resubmit.
                doc_url: /docs/errors#request-validation_failed
                request_id: req_2P9K3sample
          headers:
            Request-Id:
              $ref: '#/components/headers/RequestId'
            Invoice-Version:
              $ref: '#/components/headers/InvoiceVersionResponse'
            traceparent:
              $ref: '#/components/headers/Traceparent'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://errors.invoiceapi.mx/internal_error
                title: Internal server error
                status: 500
                code: internal.error
                detail: An unexpected error occurred.
                remediation: >-
                  Retry later; contact support with the request_id if it
                  persists.
                doc_url: /docs/errors#internal-error
                request_id: req_2P9K3sample
          headers:
            Request-Id:
              $ref: '#/components/headers/RequestId'
            Invoice-Version:
              $ref: '#/components/headers/InvoiceVersionResponse'
            traceparent:
              $ref: '#/components/headers/Traceparent'
      security: []
components:
  parameters:
    InvoiceVersion:
      name: Invoice-Version
      in: header
      required: false
      description: >-
        Pin a dated API release (Stripe-style). Omit to use the current version.
        An unknown value returns 400 `request.invalid_version`. Echoed back on
        every response.
      schema:
        type: string
        example: '2026-07-10'
    InvoiceAccount:
      name: Invoice-Account
      in: header
      required: false
      description: >-
        Connect: act on behalf of one of your connected accounts (its
        `acct_…`/`org_…` id). Omit to act as your own organization. Not honored
        on /v1/api_keys.
      schema:
        type: string
        example: org_2P9connectedacct
  headers:
    RequestId:
      description: >-
        Unique id for this request. Also the `request_id` in every error body —
        log it and quote it to support; idempotency keys off it too.
      schema:
        type: string
        example: req_2P9K3sample
    InvoiceVersionResponse:
      description: >-
        The dated API version resolved for this request (request header → key
        pin → current). Echoed on every response.
      schema:
        type: string
        example: '2026-07-15'
    Traceparent:
      description: >-
        W3C Trace Context. When you send a valid `traceparent`, the response
        continues the trace (same trace-id, a fresh span-id, sampled flag).
      schema:
        type: string
        example: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
  schemas:
    Problem:
      type: object
      description: RFC 9457 problem+json error with agent-first extensions.
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
        code:
          type: string
          description: Stable dotted machine code to switch on.
        detail:
          type: string
        remediation:
          type: string
          description: Actionable next step for a human or agent.
        request_id:
          type: string
        pac:
          type: object
          properties:
            provider:
              type: string
            codigo:
              type: string
            mensaje:
              type: string
        errors:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
              message:
                type: string
      required:
        - type
        - title
        - status
        - code
        - request_id
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'API key: `Authorization: Bearer sk_test_...` or `sk_live_...`.'

````