> ## 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.

# Expirar Checkout Session

> Expire manualmente uma checkout session aberta

## Visão Geral

Expira manualmente uma checkout session que ainda está aberta. Útil quando o pedido foi cancelado no seu sistema ou você precisa invalidar a session.

<Note>
  Sessions expiram automaticamente após **24 horas** por padrão. Use este endpoint apenas quando precisar expirar antes desse prazo.
</Note>

## Parâmetros de Path

<ParamField path="id" type="string" required>
  ID da session a ser expirada (ex: `cs_ABC123xyz`)
</ParamField>

## Exemplo de Requisição

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.garu.com.br/api/checkout/sessions/cs_ABC123xyz/expire" \
    -H "Authorization: Bearer sk_test_sua_chave_api"
  ```

  ```javascript JavaScript theme={null}
  const sessionId = 'cs_ABC123xyz';

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

  const result = await response.json();
  console.log('Session expirada:', result.data.status); // 'expired'
  ```

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

  session_id = 'cs_ABC123xyz'

  response = requests.post(
      'https://api.garu.com.br/api/checkout/sessions/' + session_id + '/expire',
      headers={'Authorization': 'Bearer ' + os.environ['GARU_API_KEY']}
  )

  data = response.json()['data']
  print('Session expirada:', data['status'])  # 'expired'
  ```
</CodeGroup>

## Resposta de Sucesso

Retorna a session atualizada com `status: "expired"`.

### Exemplo de Resposta (200 OK)

```json theme={null}
{
  "data": {
    "id": "cs_ABC123xyz",
    "status": "expired",
    "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"
    },
    "success_url": "https://seusite.com/sucesso",
    "cancel_url": "https://seusite.com/cancelado",
    "client_reference_id": "order_abc123",
    "affiliate_id": null,
    "transaction_id": null,
    "expires_at": "2025-01-19T15:00:00.000Z",
    "completed_at": null,
    "created_at": "2025-01-19T12:00:00.000Z"
  }
}
```

## Webhook de Expiração

Quando uma session é expirada, um webhook é enviado para seu endpoint configurado:

```json theme={null}
{
  "event": "checkout.session.expired",
  "data": {
    "id": "cs_ABC123xyz",
    "status": "expired",
    "product_id": 123,
    "metadata": {
      "order_id": "12345"
    },
    "client_reference_id": "order_abc123",
    "expires_at": "2025-01-19T15:00:00.000Z"
  },
  "created_at": "2025-01-19T15:00:01.000Z"
}
```

## 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="404 - Session não encontrada">
    ```json theme={null}
    {
      "statusCode": 404,
      "message": "Checkout session not found"
    }
    ```

    **Solução:** Verifique se o ID da session está correto e pertence ao seu vendedor.
  </Accordion>

  <Accordion title="409 - Session não pode ser expirada">
    ```json theme={null}
    {
      "statusCode": 409,
      "message": "Session cannot be expired"
    }
    ```

    **Solução:** A session já está `complete` ou `expired`. Apenas sessions com status `open` podem ser expiradas.
  </Accordion>
</AccordionGroup>

## Próximos Passos

<CardGroup cols={2}>
  <Card title="Criar Session" icon="plus" href="/api-reference/checkout/criar">
    Crie uma nova checkout session
  </Card>

  <Card title="Webhooks" icon="bell" href="/api-reference/webhooks">
    Configure notificações de expiração
  </Card>
</CardGroup>
