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

# Realizar checkout de uma fatura

> Cobra uma fatura em aberto via PIX ou cartão de crédito.

**Fluxo canônico para cobrança avulsa via API:**
1. `POST /api/v1/invoices` cria a fatura avulsa
2. Este endpoint (`POST /api/v1/invoices/{invoice_id}/checkout`) efetua a cobrança
3. Para PIX, a confirmação chega via webhook `invoice.paid`; para cartão,
   a resposta já retorna a fatura paga

Uma sessão de checkout com `mode: payment` também gera uma fatura avulsa
(fluxo de página hospedada): informe o cliente (`customer_id` ou
`customer`), pegue o `invoice.id` retornado e chame este endpoint da
mesma forma.

Também funciona para faturas de assinatura em aberto, com o mesmo
comportamento do endpoint de checkout da assinatura.

**Fluxo para PIX:**
1. Gera um QR code PIX sincronamente
2. Retorna o QR code, código copia-e-cola e data de expiração
3. O pagamento é confirmado via webhook (`invoice.paid`) quando o cliente pagar
4. Se chamado novamente enquanto o PIX estiver válido, retorna o mesmo (idempotente)
5. Se o PIX expirou, gera um novo automaticamente
6. Se o pagamento já foi confirmado e a fatura aguarda a baixa, retorna
   `PIX_PAYMENT_CONFIRMED` em vez de gerar um novo QR code

**Fluxo para cartão de crédito:**
1. Valida os dados do cartão e as informações de cobrança
2. Se houver um QR code PIX em aberto para a fatura, ele é expirado antes
   da cobrança — sem risco de pagamento duplicado
3. Processa a cobrança sincronamente: se aprovada, a fatura já retorna
   com status `paid` (sem esperar webhook)
4. Se o cartão for recusado, retorna `CARD_DECLINED`; a fatura continua
   `open` e um novo checkout (cartão ou PIX) pode ser tentado
5. O limite de parcelas (`installments`) é definido pelo preço do
   primeiro item da fatura




## OpenAPI

````yaml /api-reference/openapi.yml post /api/v1/invoices/{invoice_id}/checkout
openapi: 3.1.0
info:
  title: API - Simplo
  version: 1.0.0
  description: API para cobrança e assinaturas para contas Simplo
  contact:
    name: Simplo
    url: https://besimplo.com
    email: team@besimplo.com
servers:
  - url: https://besimplo.com
    description: Produção
security:
  - apiKeyAuth: []
tags:
  - name: Clientes
    description: Clientes são as pessoas que pagarão pelos produtos da sua conta
  - name: Produtos
    description: Produtos representam os bens ou serviços que você vende
  - name: Preços
    description: Preços definem quanto cobrar e a frequência de cobrança de um Produto
  - name: Assinaturas
    description: Assinaturas conectam clientes aos seus planos para cobrança recorrente
  - name: Checkout
    description: >-
      Sessões de checkout permitem que clientes completem pagamentos e
      assinaturas através de uma interface web
  - name: Faturas
    description: Faturas representam cobranças geradas para clientes
  - name: Tentativas de cobrança
    description: >-
      Cada tentativa de receber o valor de uma fatura, com vencimento próprio e
      limite de tentativas
  - name: Eventos
    description: >
      O registro do que aconteceu na conta, com o corpo congelado no instante do
      fato. O evento existe tenha ele sido entregue ou não: a entrega por
      webhook é um consumidor dele. Consulte, filtre pelo resultado da entrega e
      reenvie o que não chegou.
  - name: Webhooks
    description: >
      Os eventos do catálogo, enviados por HTTP POST para os endpoints

      cadastrados na sua conta. Cada conta registra até 5 endpoints, cada um com

      a sua URL, o seu filtro de eventos e o seu segredo.


      O corpo é o próprio evento: `"object": "event"` no topo, e `data.object`

      com o recurso a que ele se refere, no mesmo formato em que

      `GET /api/v1/<recurso>/{id}` o devolve.


      Toda entrega vai assinada, no padrão

      [Standard
      Webhooks](https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md).

      São três cabeçalhos — `webhook-id`, `webhook-timestamp` e

      `webhook-signature` — e a chave é o segredo `whsec_` daquele endpoint,

      visível no painel em **Configurações → Webhooks**.


      Responda 2xx rápido e processe depois. Uma entrega que falha é retentada

      até 10 vezes ao longo de 93 horas, então o mesmo evento pode chegar duas

      vezes: use o `evt_` do cabeçalho `webhook-id` como chave de idempotência.


      O que não chegou continua consultável por 30 dias em `GET /api/v1/events`,

      e `POST /api/v1/events/{id}/resend` manda de novo.
paths:
  /api/v1/invoices/{invoice_id}/checkout:
    post:
      tags:
        - Faturas
      summary: Realizar checkout de uma fatura
      description: >
        Cobra uma fatura em aberto via PIX ou cartão de crédito.


        **Fluxo canônico para cobrança avulsa via API:**

        1. `POST /api/v1/invoices` cria a fatura avulsa

        2. Este endpoint (`POST /api/v1/invoices/{invoice_id}/checkout`) efetua
        a cobrança

        3. Para PIX, a confirmação chega via webhook `invoice.paid`; para
        cartão,
           a resposta já retorna a fatura paga

        Uma sessão de checkout com `mode: payment` também gera uma fatura avulsa

        (fluxo de página hospedada): informe o cliente (`customer_id` ou

        `customer`), pegue o `invoice.id` retornado e chame este endpoint da

        mesma forma.


        Também funciona para faturas de assinatura em aberto, com o mesmo

        comportamento do endpoint de checkout da assinatura.


        **Fluxo para PIX:**

        1. Gera um QR code PIX sincronamente

        2. Retorna o QR code, código copia-e-cola e data de expiração

        3. O pagamento é confirmado via webhook (`invoice.paid`) quando o
        cliente pagar

        4. Se chamado novamente enquanto o PIX estiver válido, retorna o mesmo
        (idempotente)

        5. Se o PIX expirou, gera um novo automaticamente

        6. Se o pagamento já foi confirmado e a fatura aguarda a baixa, retorna
           `PIX_PAYMENT_CONFIRMED` em vez de gerar um novo QR code

        **Fluxo para cartão de crédito:**

        1. Valida os dados do cartão e as informações de cobrança

        2. Se houver um QR code PIX em aberto para a fatura, ele é expirado
        antes
           da cobrança — sem risco de pagamento duplicado
        3. Processa a cobrança sincronamente: se aprovada, a fatura já retorna
           com status `paid` (sem esperar webhook)
        4. Se o cartão for recusado, retorna `CARD_DECLINED`; a fatura continua
           `open` e um novo checkout (cartão ou PIX) pode ser tentado
        5. O limite de parcelas (`installments`) é definido pelo preço do
           primeiro item da fatura
      operationId: createInvoiceCheckout
      parameters:
        - name: invoice_id
          in: path
          description: >-
            ID único da fatura a ser cobrada, no formato TypeID com prefixo
            `in_`.
          required: true
          schema:
            type: string
            pattern: ^in_[0-9a-z]{26}$
            example: in_01h455vb4pex5vsknk084sn02q
      requestBody:
        description: >
          Dados do método de pagamento.


          **Para `payment_method_type: pix`:** não requer campos adicionais.

          **Para `payment_method_type: card`:** requer os objetos `card` e
          `billing_details`,

          e aceita `installments` dentro do limite definido pelo preço do
          primeiro item da fatura.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >
                Dados para gerar a cobrança da fatura.


                **Tipos suportados:**

                - `pix`: gera um QR code PIX — não requer campos adicionais.

                - `card`: cartão de crédito — requer `card` e `billing_details`,
                aceita `installments`.


                **Cobrança no cartão:**

                - A cobrança é síncrona: se aprovada, a fatura já retorna com
                status `paid`.

                - Se houver um QR code PIX em aberto para a fatura, ele é
                expirado antes
                  da cobrança — sem risco de pagamento duplicado.
                - O limite de parcelas é definido pelo preço do primeiro item da
                fatura.
              required:
                - payment_method_type
              properties:
                payment_method_type:
                  type: string
                  description: >
                    Tipo do método de pagamento: - pix: Pagamento instantâneo
                    via PIX (QR Code). - card: Cartão de crédito.
                  enum:
                    - pix
                    - card
                  example: pix
                installments:
                  type: integer
                  description: >
                    Quantidade de parcelas para cobrança no cartão de crédito.


                    Use apenas quando `payment_method_type` for `card`. O limite
                    de

                    parcelas é definido pelo preço do primeiro item da fatura.

                    Para `pix`, o backend sempre considera `1`.
                  minimum: 1
                  maximum: 12
                  default: 1
                  example: 3
                card:
                  type: object
                  description: >
                    Dados do cartão de crédito para processamento do pagamento.


                    **Segurança:** Os dados do cartão são tokenizados e nunca
                    armazenados em texto claro.

                    Apenas os últimos 4 dígitos e a bandeira são mantidos para
                    referência.
                  required:
                    - number
                    - exp_month
                    - exp_year
                    - cvc
                  properties:
                    number:
                      type: string
                      description: >
                        Número completo do cartão de crédito (PAN).


                        Deve conter entre 13 e 19 dígitos. Espaços e hífens são
                        removidos automaticamente.


                        **Bandeiras suportadas:** Visa, Mastercard, American
                        Express, Elo, Hipercard
                      pattern: ^[\d\s-]{13,19}$
                      example: '4242424242424242'
                    exp_month:
                      type: integer
                      description: |
                        Mês de expiração do cartão (1-12).

                        O cartão não pode estar expirado no momento da cobrança.
                      minimum: 1
                      maximum: 12
                      example: 12
                    exp_year:
                      type: integer
                      description: |
                        Ano de expiração do cartão (formato de 4 dígitos).

                        O cartão não pode estar expirado no momento da cobrança.
                      minimum: 2024
                      maximum: 2099
                      example: 2026
                    cvc:
                      type: string
                      description: |
                        Código de verificação do cartão (CVV/CVC/CID).

                        - 3 dígitos para Visa, Mastercard, Elo
                        - 4 dígitos para American Express
                      pattern: ^\d{3,4}$
                      example: '123'
                billing_details:
                  type: object
                  description: >
                    Informações do titular do cartão para validação e prevenção
                    de fraude.


                    O nome e documento são obrigatórios. O endereço é opcional
                    mas recomendado

                    para aumentar a taxa de aprovação das transações.
                  required:
                    - name
                    - document
                  properties:
                    name:
                      type: string
                      description: >
                        Nome completo do titular do cartão exatamente como
                        impresso no cartão.


                        Este nome será validado contra o cadastro do emissor.
                      minLength: 3
                      maxLength: 100
                      example: João P Silva
                    document:
                      type: string
                      description: >
                        CPF do titular do cartão (apenas números, 11 dígitos).


                        Usado para validação antifraude e conformidade
                        regulatória.
                      pattern: ^\d{11}$
                      example: '12345678900'
                    address:
                      type: object
                      description: >
                        Endereço de cobrança do titular do cartão.


                        Fornecer o endereço completo aumenta significativamente
                        a taxa de aprovação

                        das transações, pois permite validação AVS (Address
                        Verification System).
                      properties:
                        street:
                          type: string
                          description: |
                            Nome da rua, avenida ou logradouro.

                            Exemplo: "Rua das Flores", "Av. Paulista"
                          maxLength: 200
                          example: Rua das Flores
                        number:
                          type: string
                          description: |
                            Número do endereço.

                            Exemplo: "123", "456-A", "S/N"
                          maxLength: 20
                          example: '123'
                        complement:
                          type: string
                          description: >
                            Complemento do endereço (apartamento, bloco, sala,
                            etc).


                            Opcional. Deixe vazio se não houver complemento.
                          maxLength: 100
                          example: Apto 45
                        neighborhood:
                          type: string
                          description: Bairro do endereço de cobrança.
                          maxLength: 100
                          example: Centro
                        city:
                          type: string
                          description: Cidade do endereço de cobrança.
                          maxLength: 100
                          example: São Paulo
                        state:
                          type: string
                          description: |
                            Estado (UF) do endereço de cobrança.

                            Use a sigla de 2 letras (ex: SP, RJ, MG).
                          pattern: ^[A-Z]{2}$
                          maxLength: 2
                          example: SP
                        postal_code:
                          type: string
                          description: >
                            CEP do endereço de cobrança.


                            Formato aceito: "12345-678" ou "12345678" (com ou
                            sem hífen).
                          pattern: ^\d{5}-?\d{3}$
                          example: 01310-100
            examples:
              pix:
                summary: Gerar PIX
                description: Gera um QR code PIX para pagamento da fatura
                value:
                  payment_method_type: pix
              cartao_completo:
                summary: Cobrar no cartão de crédito (dados completos)
                description: >-
                  Exemplo com todos os campos de endereço de cobrança
                  preenchidos
                value:
                  payment_method_type: card
                  installments: 3
                  card:
                    number: '4242424242424242'
                    exp_month: 12
                    exp_year: 2026
                    cvc: '123'
                  billing_details:
                    name: João da Silva
                    document: '12345678900'
                    address:
                      street: Rua das Flores
                      number: '123'
                      complement: Apto 45
                      neighborhood: Centro
                      city: São Paulo
                      state: SP
                      postal_code: 01310-100
              cartao_minimo:
                summary: Cobrar no cartão de crédito (dados mínimos)
                description: Exemplo com apenas os campos obrigatórios
                value:
                  payment_method_type: card
                  card:
                    number: '5555555555554444'
                    exp_month: 6
                    exp_year: 2027
                    cvc: '456'
                  billing_details:
                    name: Maria Santos
                    document: '98765432100'
      responses:
        '201':
          description: >
            Cobrança realizada com sucesso.


            **Para PIX:** o response inclui a fatura e o QR code para pagamento.

            A fatura permanece `open` até a confirmação do pagamento via
            webhook.

            **Para cartão:** a cobrança é processada imediatamente e a fatura

            já retorna com status `paid`.
          content:
            application/json:
              schema:
                description: >
                  Resposta do checkout bem-sucedido contendo a fatura e os
                  detalhes do

                  método de pagamento utilizado.


                  - `pix`: inclui o QR code gerado; a fatura permanece `open`
                  até a
                    confirmação do pagamento via webhook.
                  - `card`: a cobrança é síncrona; quando aprovada, a fatura já
                  retorna
                    com status `paid`.
                unevaluatedProperties: false
                required:
                  - payment_method
                allOf:
                  - type: object
                    required:
                      - id
                      - object
                      - amount_due
                      - created
                      - currency
                      - customer
                      - live_mode
                      - status
                      - total
                    properties:
                      id:
                        type: string
                        pattern: ^in_[0-9a-z]{26}$
                        readOnly: true
                        description: >-
                          ID único da fatura, no formato TypeID com prefixo
                          `in_`.
                        example: in_01h455vb4pex5vsknk084sn02q
                      object:
                        type: string
                        description: Tipo do objeto. Sempre 'invoice'.
                        enum:
                          - invoice
                        example: invoice
                      amount_due:
                        type: integer
                        description: Valor a pagar em centavos. R$ 99,90 = 9990.
                        example: 9990
                      amount_paid:
                        type: integer
                        description: Valor já pago em centavos. R$ 99,90 = 9990.
                        example: 0
                      amount_refunded:
                        type: integer
                        description: >
                          Valor estornado em centavos. Permanece separado de
                          `status`: uma fatura

                          paga continua com `status: paid` depois de um estorno
                          total ou parcial.
                        example: 0
                      amount_remaining:
                        type: integer
                        description: Valor restante a pagar em centavos. R$ 99,90 = 9990.
                        example: 9990
                      created:
                        type: integer
                        format: int64
                        readOnly: true
                        description: Timestamp Unix da criação da fatura.
                        example: 1704672000
                      currency:
                        type: string
                        description: Moeda do valor. Sempre 'brl' (Real brasileiro).
                        enum:
                          - brl
                        example: brl
                      customer:
                        type: string
                        pattern: ^cus_[0-9a-z]{26}$
                        description: >-
                          ID do cliente associado à fatura, no formato TypeID
                          com prefixo `cus_`.
                        example: cus_01h455vb4pex5vsknk084sn02p
                      customer_email:
                        type:
                          - string
                          - 'null'
                        nullable: true
                        description: E-mail do cliente.
                        example: joao.silva@exemplo.com
                      customer_name:
                        type:
                          - string
                          - 'null'
                        nullable: true
                        description: Nome do cliente.
                        example: João Silva
                      external_code:
                        type:
                          - string
                          - 'null'
                        nullable: true
                        description: >-
                          Código externo para integração com outros sistemas.
                          Único por conta.
                        example: PEDIDO-123
                      live_mode:
                        type: boolean
                        description: >-
                          Indica ambiente de produção (true) ou sandbox (false).
                          Dados de sandbox são limpos periodicamente.
                        example: true
                      paid:
                        type: boolean
                        description: Indica se a fatura foi paga.
                        example: false
                      payment_intent:
                        type:
                          - string
                          - 'null'
                        nullable: true
                        pattern: ^pi_[0-9a-z]{26}$
                        description: >
                          ID da cobrança associada à fatura, no formato TypeID
                          com prefixo `pi_`.

                          `null` enquanto a fatura ainda não tem cobrança
                          gerada.
                        example: pi_01h455vb4pex5vsknk084sn02r
                      status:
                        type: string
                        description: |
                          Status atual da fatura.
                          - draft: Rascunho, ainda não finalizada.
                          - open: Aberta, aguardando pagamento.
                          - paid: Paga.
                          - uncollectible: Marcada como incobrável.
                          - void: Cancelada.
                        enum:
                          - draft
                          - open
                          - paid
                          - uncollectible
                          - void
                        example: open
                      status_transitions:
                        type: object
                        description: |
                          Timestamps de quando a fatura mudou de status.
                          Campos são null se a transição ainda não ocorreu.
                        properties:
                          paid_at:
                            type:
                              - integer
                              - 'null'
                            nullable: true
                            format: int64
                            description: Timestamp Unix de quando a fatura foi paga.
                            example: 1704758400
                      subscription:
                        type:
                          - string
                          - 'null'
                        nullable: true
                        pattern: ^sub_[0-9a-z]{26}$
                        description: >-
                          ID da assinatura associada (se aplicável), no formato
                          TypeID com prefixo `sub_`.
                        example: sub_01h455vb4pex5vsknk084sn02s
                      total:
                        type: integer
                        description: Valor total da fatura em centavos. R$ 99,90 = 9990.
                        example: 9990
                  - type: object
                    properties:
                      payment_method:
                        description: Método de pagamento utilizado na cobrança da fatura.
                        oneOf:
                          - type: object
                            description: Método de pagamento PIX gerado para a fatura.
                            required:
                              - id
                              - object
                              - type
                              - pix
                            properties:
                              id:
                                type: string
                                pattern: ^txn_[0-9a-z]{26}$
                                description: >-
                                  ID da transação PIX, no formato TypeID com
                                  prefixo `txn_`.
                                example: txn_01h455vb4pex5vsknk084sn02x
                              object:
                                type: string
                                description: Tipo do objeto. Sempre "payment_method".
                                enum:
                                  - payment_method
                                example: payment_method
                              type:
                                type: string
                                description: >-
                                  Tipo do método de pagamento. Sempre "pix" para
                                  pagamentos PIX.
                                enum:
                                  - pix
                                example: pix
                              pix:
                                type: object
                                description: >
                                  Dados do QR code PIX para pagamento.


                                  O QR code é válido até a data de expiração
                                  (`expires`).

                                  Após esse período, um novo QR code será gerado
                                  automaticamente se o endpoint for chamado
                                  novamente.
                                required:
                                  - qr_code
                                  - pix_copy_paste
                                properties:
                                  qr_code:
                                    type: string
                                    description: >
                                      Imagem do QR code em formato base64 (PNG).


                                      Este QR code pode ser exibido diretamente
                                      ao usuário para leitura

                                      pelo aplicativo do banco.
                                    example: >-
                                      iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9...
                                  pix_copy_paste:
                                    type: string
                                    description: >
                                      Código PIX copia-e-cola (formato EMV).


                                      O usuário pode copiar este código e colar
                                      diretamente no aplicativo

                                      do banco para realizar o pagamento sem
                                      escanear o QR code.
                                    example: >-
                                      00020126580014br.gov.bcb.pix0136a629532e-7693-4846-852d-1c4c12345678...
                                  expires:
                                    type:
                                      - integer
                                      - 'null'
                                    format: int64
                                    description: >
                                      Timestamp Unix de quando o QR code PIX
                                      expira.


                                      Após esta data, o QR code não será mais
                                      válido e um novo será

                                      gerado automaticamente ao chamar o
                                      endpoint novamente.


                                      Pode ser null em ambiente de testes.
                                    example: 1764047487
                              created:
                                type: integer
                                format: int64
                                description: >-
                                  Timestamp Unix de quando o método de pagamento
                                  foi criado.
                                example: 1764040285
                          - type: object
                            description: >
                              Método de pagamento cartão de crédito utilizado na
                              cobrança da fatura.


                              Por segurança, apenas os últimos 4 dígitos e a
                              bandeira são retornados.
                            required:
                              - id
                              - object
                              - type
                              - card
                            properties:
                              id:
                                type: string
                                pattern: ^(card|txn)_[0-9a-z]{26}$
                                description: >
                                  ID do método de pagamento, no formato TypeID.
                                  Usa o prefixo `txn_`

                                  (transação do cartão) ou `card_` (cartão
                                  salvo).
                                example: txn_01h455vb4pex5vsknk084sn02y
                              object:
                                type: string
                                description: Tipo do objeto. Sempre "payment_method".
                                enum:
                                  - payment_method
                                example: payment_method
                              type:
                                type: string
                                description: >-
                                  Tipo do método de pagamento. Sempre "card"
                                  para cartão de crédito.
                                enum:
                                  - card
                                example: card
                              card:
                                type: object
                                description: >
                                  Informações resumidas do cartão para exibição.


                                  Por segurança, apenas dados não-sensíveis são
                                  retornados.

                                  Campos em ordem alfabética.
                                properties:
                                  brand:
                                    type: string
                                    description: >
                                      Bandeira do cartão identificada
                                      automaticamente.


                                      Valores possíveis: visa, mastercard, amex,
                                      elo, hipercard, etc.
                                    example: visa
                                  exp_month:
                                    type: integer
                                    description: Mês de expiração do cartão (1-12).
                                    minimum: 1
                                    maximum: 12
                                    example: 12
                                  exp_year:
                                    type: integer
                                    description: Ano de expiração do cartão.
                                    example: 2026
                                  last4:
                                    type: string
                                    description: Últimos 4 dígitos do número do cartão.
                                    pattern: ^\d{4}$
                                    example: '4242'
                              installments:
                                type: integer
                                description: Quantidade de parcelas da cobrança no cartão.
                                minimum: 1
                                maximum: 12
                                example: 3
                              created:
                                type: integer
                                format: int64
                                description: >-
                                  Timestamp Unix de quando o método de pagamento
                                  foi criado.
                                example: 1764040285
              examples:
                pix_sucesso:
                  summary: PIX gerado com sucesso
                  value:
                    id: in_01h455vb4pex5vsknk084sn02q
                    object: invoice
                    amount_due: 19990
                    amount_paid: 0
                    amount_remaining: 19990
                    created: 1764040287
                    currency: brl
                    customer: cus_01h455vb4pex5vsknk084sn02p
                    customer_email: cliente@example.com
                    customer_name: João da Silva
                    live_mode: true
                    paid: false
                    payment_intent: pi_01h455vb4pex5vsknk084sn02z
                    payment_method:
                      id: txn_01h455vb4pex5vsknk084sn02x
                      object: payment_method
                      type: pix
                      pix:
                        qr_code: iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9...
                        pix_copy_paste: >-
                          00020126580014br.gov.bcb.pix0136a629532e-7693-4846-852d-1c4c12345678...
                        expires: 1764047487
                      created: 1764040285
                    status: open
                    status_transitions:
                      paid_at: null
                    subscription: null
                    total: 19990
                cartao_sucesso:
                  summary: Cartão cobrado com sucesso
                  value:
                    id: in_01h455vb4pex5vsknk084sn02q
                    object: invoice
                    amount_due: 19990
                    amount_paid: 19990
                    amount_remaining: 0
                    created: 1764040287
                    currency: brl
                    customer: cus_01h455vb4pex5vsknk084sn02p
                    customer_email: cliente@example.com
                    customer_name: João da Silva
                    live_mode: true
                    paid: true
                    payment_intent: pi_01h455vb4pex5vsknk084sn02z
                    payment_method:
                      id: txn_01h455vb4pex5vsknk084sn02y
                      object: payment_method
                      type: card
                      card:
                        brand: visa
                        exp_month: 12
                        exp_year: 2026
                        last4: '4242'
                      installments: 3
                      created: 1764040290
                    status: paid
                    status_transitions:
                      paid_at: 1764040290
                    subscription: null
                    total: 19990
        '400':
          description: Requisição inválida
          headers:
            Content-Language:
              description: Idioma da mensagem de erro.
              schema:
                type: string
                enum:
                  - en
          content:
            application/problem+json:
              schema:
                type: object
                required:
                  - type
                  - status
                  - title
                  - detail
                  - code
                properties:
                  type:
                    type: string
                    description: URI que identifica o tipo de problema
                    format: uri
                    enum:
                      - >-
                        https://problems-registry.smartbear.com/missing-body-property
                      - https://problems-registry.smartbear.com/bad-request
                  status:
                    type: integer
                    description: O código de status HTTP
                    format: int32
                    enum:
                      - 400
                  title:
                    type: string
                    description: O nome do status HTTP
                    enum:
                      - Bad Request
                  detail:
                    type: string
                    description: >-
                      Mensagem descritiva do erro, nomeando o parâmetro
                      rejeitado
                  code:
                    type: string
                    description: Código de erro interno da API
                    enum:
                      - PARAMETER_MISSING
                      - MALFORMED_JSON
                      - INVALID_QUERY_PARAMETER
                  errors:
                    type: array
                    description: >-
                      Erros por campo. Presente quando o parâmetro rejeitado é
                      conhecido.
                    items:
                      oneOf:
                        - type: object
                          required:
                            - detail
                            - pointer
                          not:
                            required:
                              - parameter
                          properties:
                            detail:
                              type: string
                              description: Mensagem específica sobre o campo rejeitado
                            pointer:
                              type: string
                              description: Caminho JSON para o campo no corpo da requisição
                        - type: object
                          required:
                            - detail
                            - parameter
                          not:
                            required:
                              - pointer
                          properties:
                            detail:
                              type: string
                              description: Mensagem específica sobre o parâmetro rejeitado
                            parameter:
                              type: string
                              description: Nome do parâmetro de consulta rejeitado
              examples:
                parameter_missing:
                  summary: Nenhum campo reconhecido no corpo
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/missing-body-property
                    status: 400
                    title: Bad Request
                    detail: >-
                      The 'customer' parameter is required and must contain at
                      least one recognized field. Expected fields:
                      external_code, identifier, name, email, phone, address.
                    code: PARAMETER_MISSING
                    errors:
                      - detail: No recognized field was found in 'customer'.
                        pointer: /customer
                malformed_json:
                  summary: Corpo não é JSON válido
                  value:
                    type: https://problems-registry.smartbear.com/bad-request
                    status: 400
                    title: Bad Request
                    detail: The request body is not valid JSON
                    code: MALFORMED_JSON
                invalid_query_parameter:
                  summary: Parâmetro de consulta inválido
                  value:
                    type: https://problems-registry.smartbear.com/bad-request
                    status: 400
                    title: Bad Request
                    detail: >-
                      The 'limit' query parameter must be an integer between 1
                      and 100
                    code: INVALID_QUERY_PARAMETER
                    errors:
                      - detail: The query parameter is invalid.
                        parameter: limit
        '404':
          description: Não encontrado
          content:
            application/problem+json:
              schema:
                type: object
                required:
                  - type
                  - status
                  - title
                  - detail
                  - code
                properties:
                  type:
                    type: string
                    description: URI que identifica o tipo de problema
                    format: uri
                    enum:
                      - https://problems-registry.smartbear.com/not-found
                  status:
                    type: integer
                    description: O código de status HTTP
                    format: int32
                    enum:
                      - 404
                  title:
                    type: string
                    description: O nome do status HTTP
                    enum:
                      - Not Found
                  detail:
                    type: string
                    description: Mensagem descritiva do erro
                  code:
                    type: string
                    description: Código de erro interno da API
                    enum:
                      - NOT_FOUND
                      - RESOURCE_MISSING
              examples:
                not_found:
                  summary: Recurso não encontrado
                  value:
                    type: https://problems-registry.smartbear.com/not-found
                    status: 404
                    title: Not Found
                    detail: The requested resource was not found
                    code: NOT_FOUND
                customer_not_found:
                  summary: Cliente não encontrado
                  value:
                    type: https://problems-registry.smartbear.com/not-found
                    status: 404
                    title: Not Found
                    detail: 'No such customer: ''019abc12-3456-7890-abcd-ef1234567890'''
                    code: RESOURCE_MISSING
        '422':
          description: Erro de regra de negócio ou validação
          content:
            application/problem+json:
              schema:
                type: object
                required:
                  - type
                  - status
                  - title
                  - detail
                  - code
                properties:
                  type:
                    type: string
                    description: >-
                      URL que identifica o tipo de erro ocorrido. Útil para
                      tratamento programático de erros.
                    example: https://problems-registry.smartbear.com/validation-error
                    format: uri
                    maxLength: 1024
                  status:
                    type: integer
                    description: >-
                      Código de status HTTP da resposta. Corresponde ao status
                      code retornado na requisição.
                    example: 400
                    format: int32
                    minimum: 100
                    maximum: 599
                  title:
                    type: string
                    description: >-
                      Título curto e descritivo do erro. Ideal para exibir em
                      logs ou mensagens de erro genéricas.
                    example: Bad Request
                    maxLength: 1024
                  detail:
                    type: string
                    description: >-
                      Mensagem detalhada do erro específico para esta
                      requisição. Use esta mensagem para entender o que deu
                      errado.
                    example: O campo email é obrigatório e não foi informado.
                    maxLength: 4096
                  instance:
                    type: string
                    description: >-
                      Identificador único desta ocorrência de erro. Forneça este
                      valor ao solicitar suporte para facilitar o debug.
                    example: req_abc123def456
                    maxLength: 1024
                  code:
                    type: string
                    description: >-
                      Código de erro interno da API. Útil para mapear tipos
                      específicos de erros no seu código.
                    example: VALIDATION_ERROR
                    maxLength: 50
                  errors:
                    type: array
                    description: >-
                      Lista de erros de validação específicos. Presente quando
                      múltiplos campos falham na validação.
                    maxItems: 1000
                    items:
                      type: object
                      description: >-
                        Detalhes sobre um erro específico de validação. Ajuda a
                        identificar qual campo e valor causaram o erro.
                      required:
                        - detail
                      properties:
                        detail:
                          type: string
                          description: >-
                            Mensagem específica sobre o erro de validação deste
                            campo.
                          example: O campo email não é um endereço de e-mail válido.
                          maxLength: 4096
                        pointer:
                          type: string
                          description: >-
                            Caminho JSON para o campo no corpo da requisição que
                            causou o erro.
                          example: /customer/email
                          maxLength: 1024
                        parameter:
                          type: string
                          description: Nome do parâmetro (query ou path) que causou o erro.
                          example: customer_id
                          maxLength: 1024
                        header:
                          type: string
                          description: Nome do cabeçalho HTTP que causou o erro.
                          example: Authorization
                          maxLength: 1024
                        code:
                          type: string
                          description: >-
                            Código adicional para identificar o contexto
                            específico do erro.
                          example: INVALID_FORMAT
                          maxLength: 50
              examples:
                unsupported_payment_type:
                  summary: Tipo de pagamento não suportado
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: >-
                      Tipo de pagamento não suportado. Tipos válidos: 'pix',
                      'card'
                    code: UNSUPPORTED_PAYMENT_TYPE
                invoice_not_open:
                  summary: Fatura não está aberta
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: Fatura não está aberta para pagamento
                    code: INVOICE_NOT_OPEN
                charge_in_progress:
                  summary: Cobrança em processamento
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: >-
                      Já existe uma cobrança em processamento para esta fatura.
                      Aguarde a confirmação.
                    code: CHARGE_IN_PROGRESS
                subscription_inactive:
                  summary: Assinatura da fatura não está ativa
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: Assinatura não está ativa
                    code: SUBSCRIPTION_INACTIVE
                pix_payment_confirmed:
                  summary: Pagamento do PIX já confirmado
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: >-
                      O pagamento PIX desta fatura já foi confirmado e aguarda
                      processamento
                    code: PIX_PAYMENT_CONFIRMED
                pix_generation_failed:
                  summary: Falha ao gerar o PIX
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: Falha ao gerar QR code PIX
                    code: PIX_GENERATION_FAILED
                pix_not_accepted:
                  summary: Conta não aceita PIX
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: >-
                      Esta conta não aceita pagamentos via PIX. Utilize o
                      pagamento com cartão.
                    code: PIX_NOT_ACCEPTED
                card_declined:
                  summary: Cartão recusado
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: Cartão recusado pela operadora
                    code: CARD_DECLINED
                invalid_installments:
                  summary: Parcelamento inválido
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: Parcelamento inválido para este preço
                    code: INVALID_INSTALLMENTS
                card_not_accepted:
                  summary: Conta não aceita cartão
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: >-
                      Esta conta não aceita pagamentos com cartão. Utilize o
                      pagamento via PIX.
                    code: CARD_NOT_ACCEPTED
                payment_failed:
                  summary: Falha no pagamento
                  value:
                    type: >-
                      https://problems-registry.smartbear.com/business-rule-violation
                    status: 422
                    title: Unprocessable Entity
                    detail: Falha no processamento do pagamento
                    code: PAYMENT_FAILED
                validacao_cartao:
                  summary: Dados do cartão inválidos
                  value:
                    type: https://problems-registry.smartbear.com/validation-error
                    status: 422
                    title: Unprocessable Entity
                    detail: The request payload contains validation errors
                    code: VALIDATION_ERROR
                    errors:
                      - detail: Número do cartão inválido
                        pointer: /checkout/card_number
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >
        A chave de API usada para autenticar a requisição e identificar a sua
        conta.


        **Exemplo:** `Authorization: ApiKey my-secure-key`

````