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

# Listar sessions

> Lista paginada das compras — as de Link e as de venda rápida, juntas.

`GET /checkout/sessions`

Faz parte do recurso [Links](/pt-BR/checkout/links) — o que é uma Session e os estados dela estão
lá.

Devolve **todas** as suas Sessions, da mais recente para a mais antiga, em páginas de 20 por padrão
(máximo 100). Os filtros são opcionais e se somam. As Sessions de Link e as de
[venda rápida](/pt-BR/checkout/charges) aparecem misturadas — o que as distingue é o `linkId`, que
vem preenchido nas primeiras e `null` nas segundas.

<Note>
  **Para ver só as vendas rápidas, use a listagem delas.** [`GET /checkout/charges`](/pt-BR/checkout/charges/list)
  é a mesma Session com o filtro já aplicado. Aqui, `?linkId=chk_...` faz o contrário: restringe às
  Sessions de um template específico.
</Note>

<Note>
  **`status` aceita mais de um valor**, separados por vírgula: `?status=paid,opened`. Um valor fora
  da lista responde `400` com os aceitos.
</Note>

## Exemplo

```bash theme={null}
curl -G https://api.sandbox.z2pay.com/v1/checkout/sessions \
  -H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
  -d status=paid \
  -d page=1 \
  -d limit=20
```

```json Resposta 200 theme={null}
{
  "data": [
    {
      "id": "cs_9ffa51de3b60209c426388fbbd5ae4dc56980b13406d93b7",
      "linkId": "chk_byd8p3p79re859jpkmr0j65n3",
      "status": "paid",
      "amount": 49900,
      "currency": "BRL",
      "transactionId": "txn_ebgsvfsb4151nmbgvj4sek6ol",
      "createdAt": "2026-06-24T13:10:00.000Z",
      "expiresAt": "2026-06-25T13:10:00.000Z"
    }
  ],
  "pagination": { "page": 1, "limit": 20, "total": 37, "totalPages": 2 }
}
```


## OpenAPI

````yaml openapi/checkout.json GET /checkout/sessions
openapi: 3.0.3
info:
  title: Z2Pay Checkout API
  version: 1.0.0
  description: >-
    API pública dedicada do Checkout. Autenticação via header x-api-key com a
    API key unificada da conta (z2_{live|test}_{sk|pk}_...). Endpoints privados
    exigem uma key secret (sk); endpoints públicos aceitam a key publishable
    (pk) consumida pelo frontend do comprador.
servers:
  - url: https://api.sandbox.z2pay.com/v1
    description: Sandbox
  - url: https://api.z2pay.com/v1
    description: Produção
security: []
tags:
  - name: Checkout Links
    description: Checkout Links (integração API via sk_)
  - name: Checkout Sessions
    description: Checkout Sessions (integração API via sk_)
  - name: Vendas rápidas
    description: Cobrança individual sem Link — Sessions ad-hoc criadas com a chave secreta
paths:
  /checkout/sessions:
    get:
      tags:
        - Checkout Sessions
      summary: Listar sessions
      description: Retorna lista paginada de Sessions.
      operationId: CheckoutSessionApiController_list
      parameters:
        - name: page
          in: query
          required: false
          description: 'Página da listagem. Padrão: 1.'
          schema:
            type: integer
            minimum: 1
            default: 1
            description: 'Página da listagem. Padrão: 1.'
        - name: limit
          in: query
          required: false
          description: 'Itens por página. Padrão: 20. Máximo: 100.'
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
            description: 'Itens por página. Padrão: 20. Máximo: 100.'
        - name: linkId
          in: query
          required: false
          description: >-
            Apenas as compras geradas por este Link (`chk_`). Correspondência
            exata. Omitido, traz também as vendas rápidas.
          schema:
            type: string
            description: >-
              Apenas as compras geradas por este Link (`chk_`). Correspondência
              exata. Omitido, traz também as vendas rápidas.
        - name: status
          in: query
          required: false
          description: >-
            Situação da compra. Aceita vários valores, separados por vírgula ou
            repetindo o parâmetro. Um valor inválido responde 400 com a lista
            dos aceitos.
          schema:
            type: array
            items:
              type: string
              enum:
                - created
                - opened
                - filling
                - paying
                - partially_paid
                - paid
                - failed
                - abandoned
                - expired
                - canceled
            description: >-
              Situação da compra. Aceita vários valores, separados por vírgula
              ou repetindo o parâmetro. Um valor inválido responde 400 com a
              lista dos aceitos.
      responses:
        '200':
          description: Lista paginada
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: Identificador único do registro.
                        linkId:
                          type: string
                          nullable: true
                          description: >-
                            Identificador do link de checkout que originou o
                            registro; nulo em sessões ad-hoc.
                        status:
                          type: string
                          description: Estado atual do registro.
                        mode:
                          type: string
                          description: >-
                            Modo do checkout: 'payment' (pagamento único) ou
                            'subscription' (assinatura).
                        currency:
                          type: string
                          description: 'Moeda no padrão ISO 4217 (ex.: BRL).'
                        locale:
                          type: string
                          description: 'Idioma do checkout (ex.: pt-BR, en-US, es-ES).'
                        config:
                          type: object
                          description: >-
                            Snapshot da configuração do checkout (formas de
                            pagamento, itens e personalização visual).
                        customer:
                          type: object
                          nullable: true
                          description: >-
                            Dados do comprador (nome, e-mail, documento e demais
                            informações).
                        customFieldValues:
                          type: object
                          nullable: true
                          description: >-
                            Valores preenchidos nos campos personalizados,
                            indexados pela key de cada campo.
                        paymentMethodSelected:
                          type: string
                          nullable: true
                          description: >-
                            Forma de pagamento selecionada pelo comprador na
                            sessão (ex.: credit_card, pix, boleto).
                        subtotal:
                          type: integer
                          description: Soma dos itens antes dos descontos, em centavos.
                        discountTotal:
                          type: integer
                          description: Total de descontos aplicados, em centavos.
                        amount:
                          type: integer
                          description: Valor total a ser cobrado, em centavos.
                        discounts:
                          type: array
                          items:
                            type: object
                          nullable: true
                          description: Descontos aplicados ao valor da sessão.
                        paymentAttempts:
                          type: integer
                          description: >-
                            Quantidade de tentativas de pagamento realizadas na
                            sessão.
                        transactionId:
                          type: string
                          nullable: true
                          description: >-
                            Identificador da transação gerada pelo pagamento da
                            sessão; nulo até haver pagamento.
                        subscriptionId:
                          type: string
                          nullable: true
                          description: >-
                            Identificador da assinatura criada a partir da
                            sessão; nulo até a ativação.
                        metadata:
                          type: object
                          nullable: true
                          description: >-
                            Metadados livres (pares chave-valor) para uso do
                            integrador; não afeta o processamento.
                        createdAt:
                          type: string
                          format: date-time
                          description: Data e hora de criação do registro (ISO 8601).
                        updatedAt:
                          type: string
                          format: date-time
                          description: >-
                            Data e hora da última atualização do registro (ISO
                            8601).
                        openedAt:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Data e hora em que a sessão foi aberta pelo
                            comprador (ISO 8601); nula se ainda não aberta.
                        paidAt:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Data e hora em que o pagamento foi confirmado (ISO
                            8601); nula se não pago.
                        canceledAt:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Data e hora do cancelamento (ISO 8601); nula se não
                            cancelado.
                        expiresAt:
                          type: string
                          format: date-time
                          description: Data e hora de expiração (ISO 8601).
                        url:
                          type: string
                          description: >-
                            URL pública do checkout para o comprador finalizar o
                            pagamento.
                    description: Lista de registros retornados nesta página.
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                        description: Página atual retornada.
                      limit:
                        type: integer
                        description: Quantidade de itens por página.
                      total:
                        type: integer
                        description: Total de itens que atendem ao filtro.
                      totalPages:
                        type: integer
                        description: Total de páginas disponíveis.
                    description: >-
                      Metadados de paginação do resultado (página, limite e
                      totais).
              example:
                data:
                  - id: cs_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
                    linkId: chk_byd8p3p79re859jpkmr0j65n3
                    status: paid
                    mode: payment
                    currency: BRL
                    locale: pt-BR
                    config:
                      paymentMethods:
                        card:
                          enabled: true
                        pix:
                          enabled: true
                    customer:
                      name: João Silva
                      email: joao@example.com
                      document: '12345678909'
                    customFieldValues: null
                    paymentMethodSelected: pix
                    subtotal: 49700
                    discountTotal: 0
                    amount: 49700
                    discounts: null
                    paymentAttempts: 1
                    transactionId: txn_glv363b1d6ftu78u2jgor9t8n
                    subscriptionId: null
                    metadata: null
                    createdAt: '2025-06-29T13:45:30.000Z'
                    updatedAt: '2025-06-29T13:50:12.000Z'
                    openedAt: '2025-06-29T13:46:00.000Z'
                    paidAt: '2025-06-29T13:50:12.000Z'
                    canceledAt: null
                    expiresAt: '2025-06-30T13:45:30.000Z'
                    url: >-
                      https://pay.sandbox.z2pay.com/c/cs_9ffa51de3b60209c426388fbbd5ae4dc56980b13406d93b7
                pagination:
                  page: 1
                  limit: 20
                  total: 1
                  totalPages: 1
        '400':
          description: >-
            Requisição inválida — algum parâmetro ou campo do corpo não passou
            na validação
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
                      issues:
                        type: array
                        description: >-
                          Um item por campo rejeitado. Nunca vem vazio: se há
                          400 de validação, há pelo menos um.
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: >-
                                Campo que falhou. Vem vazio quando o erro é do
                                corpo como um todo.
                            message:
                              type: string
                              description: O que há de errado com esse campo.
              example:
                error:
                  code: VALIDATION_ERROR
                  message: Validation failed
                  issues:
                    - path: status
                      message: >-
                        Status inválido. Valores aceitos: pending,
                        waiting_payment, paid, refused, canceled, refunded
                    - path: startDate
                      message: >-
                        Data deve ser ISO 8601 com timezone (ex.:
                        2026-06-24T00:00:00Z)
        '401':
          description: Chave de API ausente, malformada ou inválida
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
              example:
                error:
                  code: UNAUTHORIZED
                  message: Invalid API key
        '403':
          description: >-
            A chave é válida, mas não tem permissão para esta operação — é o
            caso de usar uma publishable key (pk) onde a rota exige uma secret
            key (sk)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
              example:
                error:
                  code: FORBIDDEN
                  message: Forbidden — insufficient permissions
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key unificada (z2_{live|test}_{sk|pk}_...) — secret (sk) para
        integração backend, publishable (pk) para uso no frontend público

````