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

# Sandbox

> Teste sua integração no ambiente sandbox sem processar pagamentos reais.

O sandbox é um ambiente isolado para testar sua integração sem cobranças reais. Tudo funciona exatamente como em produção — incluindo webhooks — mas nenhuma transação é processada de verdade.

## Chaves de API

Cada projeto tem duas chaves de API:

| Prefixo     | Ambiente | Processa pagamentos? |
| ----------- | -------- | -------------------- |
| `sk_test_*` | Sandbox  | Não                  |
| `sk_live_*` | Produção | Sim                  |

<Warning>
  Nunca use `sk_live_*` em código frontend, repositórios públicos ou variáveis de ambiente não protegidas.
</Warning>

## Simulando pagamentos

No sandbox, confirme uma transação sem precisar de um PIX real:

```bash cURL theme={"system"}
curl -X POST https://api.payments.bob.company/api/v1/sandbox/transactions/TRANSACTION_ID/pay \
  -H "Authorization: Bearer sk_test_sua_chave"
```

Após a simulação, o webhook configurado no projeto é disparado automaticamente com o evento `transaction.paid`.

<Note>
  Webhooks funcionam normalmente no sandbox — ideal para testar o fluxo completo de ponta a ponta.
</Note>

## Desfecho automático pelos centavos

No sandbox, o desfecho da cobrança é controlado pelos **dois últimos dígitos** do valor — sem precisar chamar o endpoint de simulação:

| Centavos do valor             | Desfecho                                       |
| ----------------------------- | ---------------------------------------------- |
| `.01` (ex.: `10001`)          | Expira em \~5 segundos (`transaction.expired`) |
| `.02` (ex.: `10002`)          | Fica pendente até expirar naturalmente         |
| Qualquer outro (ex.: `10000`) | Pago em \~5 segundos (`transaction.paid`)      |

Ideal para testes automatizados: crie três cobranças e valide os três fluxos de webhook de uma vez.

## Identificando transações sandbox

Transações criadas com `sk_test_*` ficam isoladas das de produção. O campo `isSandbox: true` é incluído no payload dos webhooks para facilitar a identificação.

## Próximos passos

<CardGroup cols={2}>
  <Card title="Simular pagamento" icon="play" href="/pages/pix/simulate-payment">
    Force o pagamento de uma cobrança sandbox pela API.
  </Card>

  <Card title="Configurar webhooks" icon="webhook" href="/pages/webhooks">
    Receba `transaction.paid` e `transaction.expired` no seu endpoint.
  </Card>

  <Card title="Autenticação" icon="key" href="/pages/authentication">
    Entenda as chaves `sk_test_` e `sk_live_`.
  </Card>

  <Card title="Ir para produção" icon="rocket" href="/pages/production">
    Passe pelo checklist antes de processar pagamentos reais.
  </Card>
</CardGroup>
