- Erro na requisição: a resposta tem status 4xx ou 5xx e o objeto
error. Os erros de validação dos dados enviados recusam a chamada antes de criar a Purchase. Depois de um408ou503, a Purchase pode já existir: reenvie a criação com a mesmaX-Idempotency-Keye o mesmo corpo para receber o estado atual. - Purchase recusada: a criação respondeu
202, mas um cartão foi recusado no processamento. A Purchase terminafailede o motivo, quando existe, fica empayments[].declineReason. - Purchase em revisão: a Purchase continua
pendingcom o campopendingReview, que indica uma anomalia no processamento.
Formato do erro na requisição
Erros na requisição
idempotency_key_payload_mismatch e purchase_operation_in_progress se aplicam ao mesmo tempo, a resposta traz idempotency_key_payload_mismatch.
Erros sem businessCode
Erros do pagamento de Session
POST /v1/sessions/{id}/purchase paga uma Session com múltiplos cartões. Essa rota devolve dois grupos de erros:
- Erros da própria rota: validações da Session, listadas na tabela abaixo. Os erros
422vêm comtype: bad_requeste, em geral,detailsvazio. A exceção é um seller do split da Session que não existe mais: a resposta é um422comtype: bad_request,detailspreenchido e sembusinessCode. - Erros repassados da API de Purchases: depois das validações da Session, a rota cria a Purchase e repassa sem alteração o status e o corpo de um erro da API de Purchases. Esses erros seguem a tabela de Erros na requisição, por exemplo um
422comtype: validation_erroredetailspreenchido.
businessCode, sem depender de type ou de details. Quando o erro não tiver businessCode, trate-o como recusa genérica pelo status HTTP, sem montar regras com o texto de message.
Motivo da recusa por cartão
Quando um cartão é recusado, a Purchase terminafailed e o cartão traz status: failed. O campo declineReason traz só o código, sem mensagem, e vem de uma destas origens:
declineReason é opcional: quando a Malga não recebe um código, o campo é omitido. Trate um cartão failed sem declineReason, ou com um código que você não conhece, como recusa genérica. Use o status da Purchase e do cartão para saber o desfecho, nunca a ausência de declineReason.
Quando o cartão tem chargeId, você pode consultar a cobrança em GET /v1/charges/{id} para ver a mensagem e o código original do provedor. Nas recusas da API de Charges antes do provedor e no merchant_not_owned, a cobrança não chega a ser criada e o cartão não tem chargeId: o motivo disponível é o próprio declineReason.
Purchase em revisão
Uma Purchasepending com o campo pendingReview teve uma anomalia no processamento e não avança sozinha. Interrompa o polling automático e acione o suporte da Malga com o id da Purchase.
Erros por webhook
Os eventospurchase.failed e purchase.void_failed não trazem o motivo. Ao receber um deles, consulte a Purchase em GET /v1/purchases/{id}. O passo a passo está em Erros recebidos por webhook.
Exemplos de resposta
400 · invalid_request
400 · invalid_request
401 · X-Client-Id ausente
401 · X-Client-Id ausente
404 · purchase_not_found
404 · purchase_not_found
408 · Tempo limite excedido
408 · Tempo limite excedido
409 · idempotency_key_payload_mismatch
409 · idempotency_key_payload_mismatch
409 · purchase_operation_in_progress
409 · purchase_operation_in_progress
409 · purchase_invalid_state
409 · purchase_invalid_state
409 · purchase_intent_mismatch
409 · purchase_intent_mismatch
422 · pan_not_allowed
422 · pan_not_allowed
422 · invalid_request (X-Idempotency-Key ausente)
422 · invalid_request (X-Idempotency-Key ausente)
422 · invalid_payments_count
422 · invalid_payments_count
422 · payments_amount_mismatch
422 · payments_amount_mismatch
422 · payment_amount_below_minimum
422 · payment_amount_below_minimum
422 · currency_not_brl
422 · currency_not_brl
422 · payment_source_required
422 · payment_source_required
503 · Serviço indisponível
503 · Serviço indisponível
Session · 422 purchase_in_progress
Session · 422 purchase_in_progress
Session · 422 session_cannot_be_paid
Session · 422 session_cannot_be_paid
Session · 404 Session não encontrada
Session · 404 Session não encontrada