Integra pagamentos angolanos
com algumas linhas de código.
Uma API para todos os rails: Referências Multicaixa, Multicaixa Express e Débitos Directos. Channel-agnostic — o mesmo /v1 serve o teu site, a tua app e os teus sistemas.
1# 1. Conta sandbox imediata (sem registo, sem emails)2curl -X POST https://api-sandbox.bitpay.ao/v1/sandbox/accounts \3 -H "Content-Type: application/json" \4 -d '{"name":"A Minha Empresa"}'5# → { "sk": "sk_test_…", "pk": "pk_test_…" }6export BITPAY_SK=sk_test_... # cola aqui o "sk"78# 2. Primeiro pagamento (923000000 aprova em ~5s)9curl -X POST https://api-sandbox.bitpay.ao/v1/payment_intents \10 -H "Authorization: Bearer $BITPAY_SK" \11 -H "Content-Type: application/json" \12 -H "Idempotency-Key: pedido-001" \13 -d '{"amount":25000,"currency":"AOA",14 "payment_method":"multicaixa_express",15 "customer":{"mobile":"923000000"}}'16# → { "id": "pay_…", "status": "PENDING" } … e o webhook confirma
Do zero à produção
Cria a conta
Em dashboard.bitpay.ao (recomendado) ou com um só pedido à API.
Recebe as chaves sandbox
pk_test e sk_test imediatas — sem esperar por aprovações.
Faz o primeiro pagamento
Testa qualquer método com os cenários determinísticos do sandbox.
Pede produção
KYC, contrato e banco/PSP validados — recebes as chaves live.
API Explorer
Não acredites na nossa palavra — testa. Cria uma conta sandbox e dispara um pagamento real de teste sem sair desta página.
Experimenta agora — API real, sem sair da página
Dois cliques: conta sandbox e um pagamento de teste. A resposta é do servidor, não é uma simulação de ecrã.
PASSO 1
Cria uma conta sandbox
PASSO 2
Dispara um pagamento de teste
Primeiro cria a conta no passo 1.
Uma API, todos os rails
REST/JSON com especificação OpenAPI pública, Idempotency-Key obrigatório em operações financeiras e erros padronizados.
| POST | /v1/payment_intents | Criar intenção de pagamento |
| GET | /v1/payment_intents/{id} | Consultar estado |
| POST | /v1/refunds | Solicitar reembolso |
| POST | /v1/payment_links | Criar Pay by Link |
| POST | /v1/checkout/sessions | Criar sessão de checkout |
| POST | /v1/qr_codes | Gerar QR de pagamento |
| POST | /v1/webhook_endpoints | Registar endpoint de webhooks |
| GET | /v1/events | Consultar eventos |
| POST | /v1/mandates | Registar mandato de débito directobrevemente (P3) |
| POST | /v1/debit_instructions | Emitir débito sob mandatobrevemente (P3) |
Sandbox determinístico
Já está no ar: números de teste que produzem sempre o mesmo resultado — o caminho feliz e todos os caminhos difíceis. Base URL: https://api-sandbox.bitpay.ao/v1
Webhooks assinados
Entrega at-least-once com retries (10s, 60s, 5min). Deduplica pelo BitPay-Event-Id, verifica a assinatura HMAC e entrega a encomenda no payment.succeeded.
BitPay-Signature: t=1766066400,v1=hex(hmac_sha256(whsec, t + "." + corpo))
SDKs e plugins
Zero dependências, já apontados para o sandbox, com verificação de webhooks incluída. Ainda não estão no npm/Composer/PyPI — descarrega o .zip; o README traz um quickstart que corre tal como está.
BitPay for WooCommerce
beta · sandboxInstala, cola a secret key e grava — o webhook configura-se sozinho e a loja aceita Multicaixa em minutos. Testado contra o sandbox.
Descarregar v0.1.1 (.zip)Integração com assistente de IA
O teu assistente integra por ti.
Usas Claude, Cursor ou Copilot? Aponta-o para o llms.txt (guia compacto para modelos) e para a especificação OpenAPI — ele cria a conta sandbox, escreve o código e testa os cenários sozinho.
1Integra o gateway BitPay (Angola) no meu projeto.2Lê https://developers.bitpay.ao/llms.txt3e https://developers.bitpay.ao/openapi.yaml.4- Sandbox: https://api-sandbox.bitpay.ao/v15- Secret key só no servidor (BITPAY_SK).6- Idempotency-Key = id da encomenda.7- Confirma SÓ no webhook payment.succeeded,8 com assinatura verificada e dedupe.9- Testa 923000000, 923000001 e 923000002.
Erros previsíveis, sempre
Todos os erros seguem o mesmo formato, com código estável, mensagem clara e request_id para diagnóstico. Operador indisponível não é erro HTTP: o pagamento fica FAILED com failure_code provider_unavailable.
| 400 | invalid_request | Payload ou parâmetros inválidos |
| 400 | invalid_json | O corpo não é JSON válido |
| 400 | invalid_phone_number | Número Multicaixa Express em falta ou mal formado |
| 400 | amount_out_of_range | Montante fora do mínimo/máximo do método |
| 401 | authentication_failed | Chave de API inválida ou expirada |
| 404 | resource_not_found | Objeto inexistente ou fora da tua conta |
| 409 | idempotency_conflict | Mesma Idempotency-Key com payload diferente |
| 409 | payment_already_processed | Operação incompatível com o estado atual |
| 429 | rate_limit_exceeded | Limite de pedidos excedido (120/min) — respeita o Retry-After |
| 500 | internal_error | Erro do nosso lado — repete com a mesma Idempotency-Key |
Constrói connosco desde o primeiro dia.
O sandbox está aberto — cria a conta por API e faz o primeiro pagamento em minutos. Para produção, fala connosco.
