Avistadocs
Guias de Integração

Teste em Sandbox

Visão Geral

O ambiente sandbox permite simular diferentes cenários de webhook sem afetar transações reais. Utilize o header X-Sandbox-Scenario em qualquer request para controlar o resultado do webhook recebido.

Este recurso funciona apenas em sandbox. Em produção, o header é ignorado e o comportamento é determinado pelo resultado real da transação.

Como Usar

Adicione o header X-Sandbox-Scenario a qualquer request de Cash-In, Cash-Out ou Refund:

curl -X POST https://api.avista.global/api/pix/cash-out \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Sandbox-Scenario: error:insufficient-funds" \
  -H "Content-Type: application/json" \
  -d '{
    "value": 150.00,
    "details": {
      "key": "recipient@email.com",
      "keyType": "EMAIL",
      "name": "Recipient Name",
      "document": "39284918812"
    },
    "externalId": "test-error-001"
  }'
const response = await axios.post(
  'https://api.avista.global/api/pix/cash-out',
  {
    value: 150.00,
    details: {
      key: 'recipient@email.com',
      keyType: 'EMAIL',
      name: 'Recipient Name',
      document: '39284918812',
    },
    externalId: 'test-error-001',
  },
  {
    headers: {
      Authorization: `Bearer ${token}`,
      'X-Sandbox-Scenario': 'error:insufficient-funds',
    },
  }
);
response = requests.post(
    "https://api.avista.global/api/pix/cash-out",
    json={
        "value": 150.00,
        "details": {
            "key": "recipient@email.com",
            "keyType": "EMAIL",
            "name": "Recipient Name",
            "document": "39284918812",
        },
        "externalId": "test-error-001",
    },
    headers={
        "Authorization": f"Bearer {token}",
        "X-Sandbox-Scenario": "error:insufficient-funds",
    },
)

Cenários Disponíveis

Cenários de Erro

Simule diferentes tipos de falha no webhook:

Valor do HeaderDescriçãoWebhook Status
error:insufficient-fundsConta sem saldo suficienteERROR
error:invalid-pix-keyChave PIX não existe no DICTERROR
error:document-mismatchDocumento não corresponde ao titular da chaveERROR
error:account-blockedConta de destino bloqueada ou encerradaERROR
error:duplicate-idID de envio duplicadoERROR

Cenário de Sucesso

Valor do HeaderDescriçãoWebhook Status
successForça sucesso (comportamento padrão)CONFIRMED
(sem header)Comportamento padrão do sandboxCONFIRMED

Cenários de Delay

Simule processamento lento para testar timeouts e retry:

Valor do HeaderDescriçãoWebhook Status
delayed:5sSucesso após 5 segundos extrasCONFIRMED
delayed:30sSucesso após 30 segundos extrasCONFIRMED
delayed:60sSucesso após 60 segundos extrasCONFIRMED

O delay máximo permitido é de 120 segundos. Valores acima serão limitados automaticamente.

Exemplos de Webhook Recebido

Webhook de Sucesso (padrão)

{
  "event": "CashOut",
  "status": "CONFIRMED",
  "transactionType": "PIX",
  "movementType": "DEBIT",
  "transactionId": "12345",
  "externalId": "test-success-001",
  "endToEndId": "E17745159XI4QA0EGFU",
  "feeAmount": 0.50,
  "originalAmount": 150.00,
  "finalAmount": 150.50,
  "processingDate": "2026-03-26T10:00:00.000Z",
  "errorCode": null,
  "errorMessage": null,
  "counterpart": {
    "name": "Recipient Name",
    "document": "*.284.918-**",
    "bank": {}
  },
  "metadata": {}
}

Webhook de Erro (error:insufficient-funds)

{
  "event": "CashOut",
  "status": "ERROR",
  "transactionType": "PIX",
  "movementType": "DEBIT",
  "transactionId": "12345",
  "externalId": "test-error-001",
  "endToEndId": null,
  "feeAmount": 0.50,
  "originalAmount": 150.00,
  "finalAmount": 150.50,
  "processingDate": "2026-03-26T10:00:00.000Z",
  "errorCode": "INSUFFICIENT_FUNDS",
  "errorMessage": "Conta sem saldo",
  "counterpart": {
    "name": null,
    "document": null,
    "bank": {}
  },
  "metadata": {}
}

Quando o status é ERROR, o campo endToEndId será null (pois o PIX nunca foi confirmado pelo Banco Central) e os campos errorCode e errorMessage descrevem o motivo da falha.

Endpoints Compatíveis

O header X-Sandbox-Scenario funciona com todos os endpoints transacionais:

EndpointMétodoDescrição
/api/pix/cash-inPOSTGerar cobrança PIX (QR Code)
/api/pix/cash-outPOSTPagamento PIX por chave
/api/pix/cash-out/qrcodePOSTPagamento PIX por QR Code
/api/pix/refund-inPOSTSolicitação de estorno

Comportamento

A API processa o request normalmente e retorna 201 Created com status PENDING. O header não altera a resposta imediata — apenas o webhook subsequente.

Após ~1 segundo (ou mais, se usar delayed:), o webhook é enviado para a URL configurada com o cenário simulado.

Seu sistema recebe o webhook com o status correspondente ao cenário (CONFIRMED ou ERROR) e deve processar de acordo.

Importante: O header X-Sandbox-Scenario controla apenas o webhook. A resposta HTTP do endpoint sempre retorna sucesso (201 Created) com status: "PENDING", independente do cenário escolhido. O resultado final (sucesso ou erro) chega via webhook.

Restrições

O header X-Sandbox-Scenario funciona exclusivamente com contas configuradas em modo sandbox. Se sua conta está configurada com um provedor de produção e você enviar o header, a API retornará um erro:

{
  "statusCode": 400,
  "message": "X-Sandbox-Scenario header is only supported in sandbox mode. This account is not configured with a sandbox provider."
}

Certifique-se de que sua conta está em modo sandbox antes de usar este recurso. Se você receber este erro, entre em contato com suporte@avista.global para verificar a configuração da sua conta.

Boas Práticas

Teste todos os cenários

Implemente tratamento para cada status de webhook (CONFIRMED, PENDING, ERROR) antes de ir para produção.

Valide os campos de erro

Quando status é ERROR, use errorCode e errorMessage para determinar a ação adequada (retry, notificar usuário, etc.).

Teste com delay

Use cenários delayed: para verificar se seu sistema lida corretamente com webhooks que demoram a chegar.

Idempotência

Use transactionId como chave de idempotência. O mesmo webhook pode ser reenviado em caso de falha de entrega.

Nesta página