Skip to main content
O sandbox da Chargefy usa o mesmo endpoint, os mesmos objetos e os mesmos webhooks da produção. A separação vem do ambiente da API key:
  • ch_live_... cria e consulta dados de produção (livemode: true).
  • ch_test_... cria e consulta dados de teste (livemode: false).
Dados de teste não têm efeito financeiro real e ficam isolados dos dados de produção. Use chaves separadas para desenvolvimento, staging e produção.

Criar uma chave de teste

No dashboard, abra Settings → Chaves de API, clique em Nova chave e selecione o ambiente test. O token gerado começa com ch_test_.
curl https://api.chargefy.io/v1/customers \
  -H "Authorization: Bearer {{API_KEY}}"
No dashboard, use o seletor Live / Test na navegação lateral para alternar entre dados reais e dados de sandbox.

Simular cartões

Em checkouts hospedados, no Chargefy.js, na página de pagamento de fatura e nos formulários de atualização de cartão, use estes números em test mode. Use qualquer CVC de três dígitos e uma validade futura. Cartão desconhecido em test mode aprova por padrão.

Sucesso e status

CartãoResultado/statuspayment_error.categorypayment_error.codeMensagem esperada
4242424242424242succeedednullnullnull
4000000000003220requires_capturenullnullnull
4000009000000425processingnullnullnull
4000009000000433pendingnullnullnull

Falhas de cartão

CartãoResultado/statuspayment_error.categorypayment_error.codeMensagem esperada
4000000000009995failedissuer_declinedinsufficient_fundsThe card has insufficient funds to complete the purchase.
4000009000000011failedissuer_declineddo_not_honorThe issuer declined the transaction without a specific reason.
4000000000000002failedissuer_declinedgeneric_declineThe card was declined.
4000009000000029failedissuer_declinedcall_issuerThe card was declined. The cardholder must contact the issuer.
4000009000000037failedissuer_declinedcard_velocity_exceededThe card exceeded its balance, credit, or transaction limit.
4000009000000045failedissuer_declinedinvalid_amountThe transaction amount is not allowed for this card.
4000009000000052failedissuer_declinedinvalid_accountThe account linked to the card is invalid or does not exist.
4000009000000060failedissuer_declinedtransaction_not_permittedThis type of transaction is not permitted for the cardholder.
4000009000000078failedissuer_declinedservice_not_allowedThis transaction is not permitted for the card.
4000009000000086failedissuer_declinedcard_not_supportedThe card does not support this type of purchase.
4000009000000094failedissuer_declinedcurrency_not_supportedThe card does not support the transaction currency.
4000009000000102failedissuer_declinedcard_not_activatedThe card has not been activated.
4000009000000110failedissuer_declinedauthentication_requiredThe transaction requires cardholder authentication.
4000009000000128failedissuer_declinedreenter_transactionThe issuer could not process the transaction. Try again.
4000009000000136failedissuer_declinedapprove_with_idThe payment could not be authorized.
4000009000000144failedissuer_declinednot_permittedThe requested operation is not supported by the card.
4000000000000069failedinvalidexpired_cardThe card has expired.
4000000000000127failedinvalidincorrect_cvcThe card security code (CVC) is incorrect.
4000009000000151failedinvalidincorrect_numberThe card number is incorrect.
4000009000000169failedinvalidinvalid_numberThe card number is invalid or the issuer does not exist.
4000009000000177failedinvalidincorrect_pinThe card PIN is incorrect.
4000009000000185failedinvalidinvalid_pinThe card PIN is invalid.
4000009000000193failedinvalidpin_try_exceededThe allowable number of PIN tries was exceeded.
4000009000000201failedinvalidinvalid_transactionThe transaction is invalid.
4000009000000219failedinvalidno_payment_methodNo payment method available to charge.
4000009000000227failedinvalidcard_unusableThe saved card could not be used.
4000009000000235failedinvalidpayment_method_mismatchThe payment method does not belong to this customer.
4000009000000243failedblockedlost_cardThe card was reported lost.
4000009000000250failedblockedstolen_cardThe card was reported stolen.
4000009000000268failedblockedpickup_cardThe card cannot be used (retain card).
4000009000000276failedblockedrestricted_cardThe card is restricted.
4000009000000284failedblockedfraudulentThe transaction was flagged as suspected fraud.
4000009000000292failedblockedsecurity_violationThe transaction was declined for a security violation.
4000009000000300failedblockedstop_payment_orderA stop payment order applies to this card.
4000009000000318failedblockedrevocation_of_authorizationAuthorization for this card has been revoked.
4000009000000326failedblockedrevocation_of_all_authorizationsAll authorizations for this card have been revoked.
4000009000000334failedblockedtransaction_not_allowedThe transaction is not allowed.
4000009000000342failedprocessing_errorissuer_unavailableThe card issuer could not be reached. Try again.
4000009000000359failedprocessing_errorrouting_errorThe transaction could not be routed to the issuer.
4000009000000367failedprocessing_errorduplicate_transactionA duplicate transaction was detected.
4000009000000375failedprocessing_errortry_again_laterThe payment could not be processed. Try again later.
4000009000000383failedprocessing_errorconnection_errorCould not reach the payment provider. Please try again.
4000009000000391failedprocessing_errorcustomer_unavailableCustomer could not be identified for the charge.
4000000000000119failedprocessing_errorprocessing_errorAn error occurred while processing the payment. Try again.
4000009000000409failedissuer_declinedtestmode_declineA test card triggered a decline.
4000009000000417failedissuer_declinedpayment_failedPayment failed.

Simular cenários pela API

Em test mode, você também pode forçar cenários enviando metadata.sandbox_scenario no recurso que gera a cobrança.
curl https://api.chargefy.io/v1/payment-intents \
  -H "Authorization: Bearer {{API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 10990,
    "currency": "brl",
    "metadata": {
      "sandbox_scenario": "generic_decline"
    },
    "payment_method_types": ["credit"]
  }'

Cenários suportados

ValorUso
succeededAprovação imediata.
requires_captureAutorização pendente de captura.
processingProcessamento em andamento.
pendingPagamento pendente.
Qualquer payment_error.code da tabela acimaFalha de cartão com o código público correspondente.
api_errorErro interno simulado.
pix_succeededPIX aprovado.
pix_failedPIX falhou.
pix_pendingPIX pendente.
boleto_succeededBoleto pago.
boleto_failedBoleto falhou.
boleto_pendingBoleto pendente.
boleto_expiredBoleto expirado.

Webhooks em test mode

Eventos criados com ch_test_... são entregues apenas para endpoints criados no ambiente de teste e carregam livemode: false. Crie pelo menos um endpoint de webhook em test antes de validar integrações de sandbox.

Simular pagamentos assíncronos

PIX e boleto podem ficar pendentes após a confirmação. Em test mode, use test helpers para simular a liquidação posterior sem esperar uma compensação real.
curl -X POST "https://api.chargefy.io/v1/test-helpers/payment-intents/pi_123/succeed" \
  -H "Authorization: Bearer {{API_KEY}}"
Você também pode usar o ID da checkout session quando a cobrança nasceu no Checkout:
curl -X POST "https://api.chargefy.io/v1/test-helpers/checkout-sessions/cs_123/fail" \
  -H "Authorization: Bearer {{API_KEY}}"
AçãoResultado
succeedMarca o payment intent como succeeded e emite os webhooks de sucesso.
failMarca o payment intent como failed e emite os webhooks de falha.
expireMarca o payment intent como canceled por abandono e falha a charge.
Test helpers só aceitam chaves ch_test_.... Chamadas em live mode retornam erro testmode_required.

Limitação atual

Onboarding de organizações conectadas (/v1/onboarding-sessions) e contas bancárias (/v1/bank-accounts) ainda não são simulados no sandbox. Requisições com ch_test_... retornam erro sandbox_unsupported; use esses fluxos apenas quando estiver pronto para enviar um cadastro real.