Inyo

Autorizando um Pagamento com Cartão

Após tokenizar um cartão, envie o token para criar uma autorização de pagamento. Você pode escolher entre:

  • Pré-autorização ("capture": false) — Reserva os fundos sem liquidar. Você captura depois, quando estiver pronto.
  • Captura direta ("capture": true) — Autoriza e captura em uma única etapa. Os fundos são liquidados imediatamente.

Entendendo Pré-Autorização vs. Captura Direta

Este é um dos conceitos mais mal compreendidos em pagamentos com cartão. Acertar isso determina quanto controle você tem sobre o fluxo do seu dinheiro — e com que rapidez você pode reverter uma transação se algo der errado.

O que é pré-autorização?

Quando você define "capture": false, o gateway pede ao banco do portador do cartão que reserve os fundos no cartão — mas nenhum dinheiro se move ainda. O portador vê uma cobrança "pendente" no extrato, mas a liquidação (a transferência real dos fundos para a sua conta) não acontece até que você capture o pagamento explicitamente.

Pense nisso como colocar uma retenção (hold) sobre os fundos. O dinheiro ainda está na conta do portador do cartão, mas ele não pode gastá-lo em outro lugar.

Por que usar pré-autorização?

A pré-autorização lhe dá uma janela para realizar verificações adicionais antes de se comprometer com a liquidação financeira:

  • Verificação AVS / CVC — Analise os resultados de endereço e código de segurança na resposta de autorização. Se indicarem risco de fraude, você pode cancelar imediatamente.
  • Análise antifraude — Passe a transação pelo seu sistema de pontuação de fraude, filas de revisão manual ou ferramentas antifraude de terceiros.
  • Verificações de estoque / fulfillment — Confirme que o item está em estoque, que o serviço está disponível ou que qualquer validação específica do negócio passa.
  • Conformidade / KYC — Verifique se o cliente atende aos requisitos regulatórios antes de finalizar a transação.
  • Ajustes no pedido — O valor final pode diferir da retenção inicial (ex.: envios parciais). Você pode capturar um valor menor do que o autorizado.

A vantagem principal: reversão rápida e limpa

Se você precisar cancelar uma transação pré-autorizada, você realiza um cancelamento (void). Um void libera instantaneamente a retenção sobre os fundos do portador — normalmente em minutos. O portador vê a cobrança pendente desaparecer do extrato. Nenhum dinheiro chegou a se mover, então não há nada a "devolver".

Compare isso com o que acontece após a captura: uma vez que a transação é capturada, a liquidação ocorreu. O dinheiro saiu da conta do portador e chegou na sua. A única maneira de devolver os fundos nesse ponto é um reembolso, que é uma transação financeira separada e pode levar de 3 a 10 dias úteis para aparecer no extrato do portador.

Comparação lado a lado

Pré-autorização (capture: false)Captura direta (capture: true)
O que aconteceOs fundos são retidos (reservados) no cartãoOs fundos são retidos E liquidados imediatamente
Dinheiro se move?Não Não — apenas uma retenção (hold)Sim Sim — a liquidação começa
Para cancelarVoid — instantâneo, nenhum dinheiro se moveuReembolso — transação separada, 3–10 dias
O portador vêCobrança "pendente"Cobrança concluída
Limite de tempoDeve capturar em até 7 dias ou a retenção expira automaticamenteN/A — já capturado
Pode ajustar o valor?Sim Capturar menos do que o autorizadoNão O valor é final
Melhor paraE-commerce, viagens, assinaturas, qualquer coisa que precise de revisãoPonto de venda simples, bens digitais instantâneos

Quando usar cada um

Use pré-autorização (capture: false) quando:

  • Você precisa de tempo para verificar sinais de fraude, resultados de AVS/CVC ou conformidade
  • O valor final pode mudar (envios parciais, gorjetas, despesas extras de hotel)
  • Você quer a possibilidade de cancelar de forma limpa sem que um reembolso apareça no extrato do portador
  • Seu fulfillment tem qualquer atraso entre o pagamento e a entrega

Use captura direta (capture: true) quando:

  • A transação é final e imediata (download digital, compra em loja física)
  • Nenhuma revisão ou ajuste é necessário
  • Você quer a integração mais simples com menos chamadas de API

O ciclo de vida em resumo

                 capture: false                    capture: true
                 ─────────────                     ─────────────
POST /v2/payment                          POST /v2/payment
       │                                         │
       ▼                                         ▼
   AUTHORIZED                                CAPTURED
   (funds held)                              (funds settled)
       │                                         │
   ┌───┴───┐                                     ▼
   │       │                                  REFUNDED
   ▼       ▼                               (3-10 days to
CAPTURED  VOIDED                            cardholder)
(settle)  (release hold,
   │       instant)
   ▼
REFUNDED
(3-10 days)

Resumindo: Se houver qualquer chance de você precisar cancelar a transação após a autorização, use pré-autorização. É mais rápido de reverter, mais limpo para o portador do cartão e lhe dá controle total sobre o momento da liquidação.


Endpoint

POST https://{FQDN}/v2/payment

Headers:

HeaderValor
AuthorizationBearer {accessToken}
Content-Typeapplication/json

Corpo da Requisição

Objeto Raiz

CampoTipoObrigatórioDescrição
externalPaymentIdstringSimSeu identificador único para este pagamento (chave de idempotência)
ipAddressstringSimEndereço IPv4 ou IPv6 do pagador
paymentTypestringSim"PULL"
capturebooleanSimtrue = captura automática; false = apenas pré-autorização
amountobjectSimValor da transação
senderobjectSimDados do pagador

Objeto amount

CampoTipoObrigatórioDescrição
totalnumberSimValor a cobrar (deve ser ≥ 1)
currencystringSimCódigo de moeda ISO 4217 (ex.: "USD")

Objeto sender

CampoTipoObrigatórioDescrição
firstNamestringSimPrimeiro nome do pagador
lastNamestringSimSobrenome do pagador
addressobjectSimEndereço de cobrança (usado para verificação AVS)
paymentMethodobjectSimDetalhes do token do cartão

Objeto sender.address

CampoTipoObrigatórioDescrição
countryCodestringSimCódigo de país ISO Alpha-3 (ex.: "USA")
stateCodestringSimSigla do estado/província (ex.: "NY")
citystringSimNome da cidade
line1stringSimLinha 1 do endereço
line2stringNãoLinha 2 do endereço
zipCodestringSimCódigo postal/ZIP

Objeto sender.paymentMethod (Cartão)

CampoTipoObrigatórioDescrição
typestringSim"CARD"
cardTokenIdstringSimUUID do token do tokenizador

Exemplo de Requisição

curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "order-12345",
    "ipAddress": "203.0.113.42",
    "paymentType": "PULL",
    "capture": false,
    "amount": {
      "total": 99.99,
      "currency": "USD"
    },
    "sender": {
      "firstName": "John",
      "lastName": "Smith",
      "address": {
        "countryCode": "US",
        "stateCode": "NY",
        "city": "New York",
        "line1": "123 Main Street",
        "line2": "Apt 4B",
        "zipCode": "10001"
      },
      "paymentMethod": {
        "type": "CARD",
        "cardTokenId": "ab5fc589-8b48-4531-94c0-68b0629c13fe"
      }
    }
  }'

Resposta

Autorização Bem-sucedida (200)

{
  "paymentId": "dce568c6-98ec-456c-bb33-4a6809c4fff8",
  "parentPaymentId": "dce568c6-98ec-456c-bb33-4a6809c4fff8",
  "externalPaymentId": "order-12345",
  "amount": 99.99,
  "created": "2025-03-31 03:49:05",
  "approved": true,
  "message": "Payment Approved",
  "status": "AUTHORIZED",
  "captured": false,
  "voided": false,
  "automaticReversed": false,
  "authCode": "48213-BB33-4A6809C4FFF8-USD",
  "responseCode": "00",
  "acquirerMessage": "IN_PROCESS_AUTHORISED",
  "issuerName": "BANK OF AMERICA",
  "issuerCountry": "UNITED STATES",
  "cvcResult": "APPROVED",
  "avsResult": "APPROVED",
  "aniCalled": false,
  "aavAddressResult": "NOT_CHECKED",
  "aavPostcodeResult": "NOT_CHECKED",
  "aavTelephoneResult": "NOT_CHECKED",
  "aavCardholderNameResult": "NOT_CHECKED",
  "riskAssessment": {
    "score": 25,
    "riskLevel": "LOW",
    "recommendation": "PROCEED",
    "signals": [
      {
        "rule": "profile_trust",
        "score": -50,
        "detail": "Established profile email:j***@example.com: 5 captures, 0 challenges, 1 cards"
      },
      {
        "rule": "fingerprint_signals",
        "score": 55,
        "detail": "VPN connection"
      }
    ]
  }
}

O objeto riskAssessment só é retornado quando o produto antifraude da Inyo está habilitado na sua conta. Sem ele, o campo não aparece na resposta — não dependa da sua presença.

Challenge 3DS Necessário (200)

Quando o banco emissor exige a verificação do portador do cartão, a resposta retorna status: "CHALLENGE" com um redirectAcsUrl:

{
  "paymentId": "dce568c6-98ec-456c-bb33-4a6809c4fff8",
  "parentPaymentId": "dce568c6-98ec-456c-bb33-4a6809c4fff8",
  "externalPaymentId": "order-12345",
  "redirectAcsUrl": "https://{FQDN}/secure-code/start-challenge?token=dce568c6-98ec-456c-bb33-4a6809c4fff8",
  "amount": 99.99,
  "created": "2025-03-31 03:49:05",
  "approved": false,
  "message": "Payment awaiting 3DS challenge verification",
  "status": "CHALLENGE",
  "captured": false,
  "voided": false,
  "automaticReversed": false,
  "authCode": "48213-BB33-4A6809C4FFF8-USD",
  "responseCode": "00",
  "acquirerMessage": "Payment awaiting 3DS challenge verification",
  "issuerName": "BANK OF AMERICA",
  "issuerCountry": "UNITED STATES",
  "cvcResult": "N/A",
  "avsResult": "N/A",
  "aniCalled": false,
  "aavAddressResult": "N/A",
  "aavPostcodeResult": "N/A",
  "aavTelephoneResult": "N/A",
  "aavCardholderNameResult": "N/A",
  "riskAssessment": {
    "score": 30,
    "riskLevel": "MEDIUM",
    "recommendation": "REVIEW",
    "signals": [
      {
        "rule": "new_sender_risk",
        "score": 30,
        "detail": "No sender profile found — first-time customer"
      }
    ]
  }
}

Quando você receber CHALLENGE, redirecione o portador do cartão para o redirectAcsUrl. Veja Tratando o 3D Secure para o fluxo completo.

Recusado (400)

{
  "paymentId": "dce568c6-98ec-456c-bb33-4a6809c4fff8",
  "parentPaymentId": "dce568c6-98ec-456c-bb33-4a6809c4fff8",
  "externalPaymentId": "order-12345",
  "amount": 99.99,
  "created": "2025-03-31 03:49:05",
  "approved": false,
  "message": "Declined by issuer",
  "status": "DECLINED",
  "captured": false,
  "voided": false,
  "automaticReversed": false,
  "authCode": "48213-BB33-4A6809C4FFF8-USD",
  "responseCode": "PAY_680",
  "issuerName": "BANK OF AMERICA",
  "issuerCountry": "UNITED STATES",
  "cvcResult": "N/A",
  "avsResult": "N/A",
  "aniCalled": false,
  "aavAddressResult": "N/A",
  "aavPostcodeResult": "N/A",
  "aavTelephoneResult": "N/A",
  "aavCardholderNameResult": "N/A",
  "riskAssessment": {
    "score": 0,
    "riskLevel": "LOW",
    "recommendation": "PROCEED",
    "signals": [
      {
        "rule": "bureau_trusted",
        "score": 0,
        "detail": "Known trusted client (3DS-verified) — consistent identity"
      }
    ]
  }
}

Campos da Resposta

CampoTipoDescrição
paymentIdstringIdentificador único de pagamento da Inyo
parentPaymentIdstringID do pagamento pai (igual ao paymentId em autorizações iniciais)
externalPaymentIdstringSeu ID externo original
redirectAcsUrlstringURL do challenge 3DS (presente apenas quando status = CHALLENGE)
amountnumberValor da transação
createdstringTimestamp (EST)
approvedbooleantrue se autorizado com sucesso
messagestringMensagem de status legível
automaticReversedbooleantrue se o pagamento foi revertido automaticamente por regras de fraude
statusstringAUTHORIZED, CHALLENGE ou DECLINED
capturedbooleantrue se capturado automaticamente ("capture": true na requisição)
voidedbooleantrue se cancelado (voided)
responseCodestringCódigo de resposta do emissor/gateway (veja Códigos de Resposta)
authCodestringCódigo de autorização da transação
acquirerMessagestringMensagem de status bruta do adquirente — apenas informativa; tome decisões com base em status e responseCode e não a exiba ao usuário final
issuerNamestringNome do banco emissor
issuerCountrystringPaís do emissor
cvcResultstringAPPROVED, FAILED, NOT_SENT ou N/A
avsResultstringAPPROVED, FAILED, NOT_SENT ou N/A
aniCalledbooleantrue se uma Account Name Inquiry (verificação do nome do titular) foi enviada à bandeira
aavAddressResultstringResultado da verificação de endereço (ex.: APPROVED, PARTIAL_MATCH, FAILED, NOT_CHECKED)
aavPostcodeResultstringResultado da verificação do código postal (mesmos valores de aavAddressResult)
aavTelephoneResultstringResultado da verificação do telefone (mesmos valores de aavAddressResult)
aavCardholderNameResultstringResultado da verificação do nome do titular (mesmos valores de aavAddressResult)
riskAssessmentobjectAvaliação antifraude do pagamento. Presente apenas quando o produto antifraude da Inyo está habilitado na sua conta

Objeto riskAssessment

Retornado apenas quando o produto antifraude da Inyo está habilitado na sua conta. Fale com seu representante Inyo para habilitá-lo.

CampoTipoDescrição
scoreintegerScore de risco geral do pagamento — quanto maior, mais arriscado
riskLevelstringFaixa de risco derivada do score (ex.: LOW, MEDIUM)
recommendationstringAção sugerida para o pagamento (ex.: PROCEED, REVIEW)
signalsarrayRegras que contribuíram para o score
signals[].rulestringIdentificador da regra acionada (ex.: profile_trust, fingerprint_signals, new_sender_risk, bureau_trusted)
signals[].scoreintegerContribuição da regra para o score — valores negativos reduzem o risco
signals[].detailstringExplicação legível de por que a regra foi acionada

O Que Vem a Seguir