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

# Listar Checkout Sessions

> Consulte suas checkout sessions com paginação e filtros

## Visão Geral

Retorna uma lista paginada de todas as suas checkout sessions, com opção de filtrar por status.

## Parâmetros de Query

<ParamField query="page" type="integer" default="1">
  Número da página
</ParamField>

<ParamField query="limit" type="integer" default="10">
  Itens por página (máx 100)
</ParamField>

<ParamField query="status" type="string">
  Filtrar por status: `open`, `complete` ou `expired`
</ParamField>

## Exemplo de Requisição

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.garu.com.br/api/checkout/sessions?page=1&limit=10&status=complete" \
    -H "Authorization: Bearer sk_test_sua_chave_api"
  ```

  ```javascript JavaScript theme={null}
  const params = new URLSearchParams({
    page: '1',
    limit: '10',
    status: 'complete'
  });

  const response = await fetch(
    'https://api.garu.com.br/api/checkout/sessions?' + params,
    {
      headers: {
        'Authorization': 'Bearer ' + process.env.GARU_API_KEY
      }
    }
  );

  const result = await response.json();
  console.log('Total de sessions:', result.total_count);
  ```

  ```python Python theme={null}
  import requests
  import os

  response = requests.get(
      'https://api.garu.com.br/api/checkout/sessions',
      headers={'Authorization': 'Bearer ' + os.environ['GARU_API_KEY']},
      params={
          'page': 1,
          'limit': 10,
          'status': 'complete'
      }
  )

  result = response.json()
  print('Total de sessions:', result['total_count'])
  ```
</CodeGroup>

## Resposta de Sucesso

<ResponseField name="data" type="array">
  Lista de checkout sessions
</ResponseField>

<ResponseField name="count" type="integer">
  Número de sessions na página atual
</ResponseField>

<ResponseField name="total_count" type="integer">
  Total de sessions (considerando filtros)
</ResponseField>

<ResponseField name="total_pages" type="integer">
  Total de páginas
</ResponseField>

### Exemplo de Resposta (200 OK)

```json theme={null}
{
  "data": [
    {
      "id": "cs_ABC123xyz",
      "status": "complete",
      "url": "https://pay.garu.com.br/pay/session/abc123...",
      "product_id": 123,
      "price_id": null,
      "customer_email": "joao@email.com",
      "customer_name": "João Silva",
      "metadata": {
        "order_id": "12345"
      },
      "transaction_id": 789,
      "expires_at": "2025-01-20T12:00:00.000Z",
      "completed_at": "2025-01-19T14:30:00.000Z",
      "created_at": "2025-01-19T12:00:00.000Z"
    }
  ],
  "count": 1,
  "total_count": 150,
  "total_pages": 15
}
```

## Status de Session

| Status     | Descrição                                |
| ---------- | ---------------------------------------- |
| `open`     | Session ativa, aguardando pagamento      |
| `complete` | Pagamento bem-sucedido, transação criada |
| `expired`  | Session expirou antes do pagamento       |

## Erros Comuns

<AccordionGroup>
  <Accordion title="401 - Não autorizado">
    ```json theme={null}
    {
      "statusCode": 401,
      "message": "Unauthorized"
    }
    ```

    **Solução:** Verifique se o header `Authorization` está correto.
  </Accordion>

  <Accordion title="429 - Rate limit excedido">
    ```json theme={null}
    {
      "statusCode": 429,
      "message": "Too Many Requests"
    }
    ```

    **Solução:** Aguarde antes de fazer novas requisições. Limite: 100 requisições por minuto.
  </Accordion>
</AccordionGroup>

## Próximos Passos

<CardGroup cols={2}>
  <Card title="Detalhes da Session" icon="magnifying-glass" href="/api-reference/checkout/detalhes">
    Consulte uma session específica
  </Card>

  <Card title="Criar Session" icon="plus" href="/api-reference/checkout/criar">
    Crie novas checkout sessions
  </Card>
</CardGroup>
