Criar Cobrança 3DS
Processa um pagamento por cartão de crédito com autenticação 3DS. Requer token de cartão e dados da autenticação 3DS obtidos previamente no front-end.
Visão geral
O métodothreeDs processa um pagamento por cartão de crédito com autenticação 3-D Secure (3DS). Esse fluxo garante que o portador do cartão foi autenticado pelo banco emissor antes da cobrança, transferindo a responsabilidade de chargeback por fraude do produtor para o emissor (liability shift).
Tokenizar o cartão
POST /public_api/card-tokens/ para obter um cardToken de uso único, válido por 15 minutos.Iniciar sessão 3DS
referenceId de sessão.Autenticar o comprador
cavv, eci, version e referenceId.Autenticação
Todas as requisições exigem um token OAuth2 válido obtido emPOST /public_api/token/.
| Header | Obrigatório | Descrição |
|---|---|---|
Authorization | Sim | Bearer <access_token>. |
Content-Type | Sim | application/json. |
X-Idempotency-Key | Sim | Identificador único da cobrança (até 255 caracteres). Recomendado UUID v4. |
Escopo
Idempotência
O headerX-Idempotency-Key é obrigatório e permite reenviar a mesma requisição com segurança sem gerar cobranças duplicadas. Janela de retenção: 24 horas.
Rate limit
| Critério | Padrão |
|---|---|
| Por IP de origem | 60 requisições / minuto |
| Por token de acesso | 120 requisições / minuto |
Corpo da requisição
Resumo dos campos
| Campo | Tipo | Obrigatório |
|---|---|---|
productId | string | Sim |
paymentMethod | "threeDs" | Sim |
customer | object | Sim |
customer.name | string | Sim |
customer.email | string | Sim |
customer.phone | string | Sim |
customer.fingerprint | string | Sim |
customer.docType | enum (cpf, cnpj) | Não (obrigatório na prática) |
customer.docNumber | string | Não (obrigatório na prática) |
items (exatamente 1 item) | array | Sim |
items[].offerId | string | Sim |
card | object | Sim |
card.token | string | Sim |
threeDSecure | object | Não (fortemente recomendado) |
threeDSecure.cavv | string | Não |
threeDSecure.eci | string | Não |
threeDSecure.xid | string | Não |
threeDSecure.referenceId | string | Não |
threeDSecure.version | string | Não |
threeDSecure.dataOnly | boolean | Não (default false) |
address | object | Não (obrigatório se o produto exige entrega física) |
affiliateShortId | string | Não |
coupon | string | Não |
metadata | object | Não |
antifraudProfilingAttemptReference | string | Sim |
Detalhamento dos campos
short_id ou o id (UUID). O produto deve pertencer ao tenant autenticado."threeDs" para pagamentos com autenticação 3DS.POST /public_api/card-tokens/.short_id do afiliado responsável pela venda.Resposta de sucesso
201 Created
| Valor | Significado |
|---|---|
paid | Pagamento autorizado e capturado. |
declined | Recusado pelo banco ou adquirente (limite, bloqueio, fraude). |
refused | Recusado por falha técnica no adquirente. |
pending | Desafio 3DS ainda em andamento (fluxo Worldpay backend-driven). |
threeDs.Exemplo de resposta
Respostas de erro
| Código | Quando ocorre | Corpo de exemplo |
|---|---|---|
400 | Header X-Idempotency-Key ausente ou inválido. | { "detail": "Header X-Idempotency-Key é obrigatório." } |
400 | Campo card ausente no payload. | { "card": "Este campo é obrigatório quando o método de pagamento é credit_card ou threeDs." } |
400 | productId inválido ou de outro tenant. | { "productId": ["Produto não encontrado."] } |
400 | Oferta inexistente ou de outro produto. | { "items": ["Oferta não encontrada para o produto informado."] } |
400 | antifraudProfilingAttemptReference ausente. | { "antifraudProfilingAttemptReference": ["Este campo é obrigatório."] } |
401 | Token ausente, inválido ou expirado. | { "detail": "As credenciais de autenticação não foram fornecidas." } |
403 | Chave de API sem escopo payments. | { "detail": "Você não tem permissão para executar esta ação." } |
409 | X-Idempotency-Key reutilizado com payload diferente. | { "detail": "Header X-Idempotency-Key reutilizado com payload diferente." } |
429 | Rate limit excedido. | { "detail": "Request was throttled. Expected available in 60 seconds." } |
Exemplo de requisição
Boas práticas
- Sempre obtenha o
cardTokenimediatamente antes de chamar este endpoint. O token expira em 15 minutos e é de uso único. - Trate o status
pending— ocorre quando o adquirente (ex.: Worldpay) ainda está processando o desafio 3DS iniciado pelo backend. Monitore via webhookpurchase_approvedoupurchase_refusedpara atualizar o estado na sua aplicação. - Envie
threeDSecuresempre que disponível. Sem ele, a transação pode ser processada sem liability shift, expondo o produtor a chargebacks por fraude. - Não confunda
declinedcomrefused.declinedé recusa financeira do banco (limite, suspeita de fraude).refusedé falha técnica no adquirente.
Authorizations
Token de autenticação do tipo Bearer {access_token}, onde {access_token} é o token obtido no fluxo de autenticação.
Headers
Identificador único da cobrança (até 255 caracteres). Recomendado UUID v4. Reuso com payload idêntico devolve a resposta original por 24h.
255Body
short_id ou id (UUID) do produto. O produto deve pertencer ao
tenant autenticado e estar ativo.
Método de pagamento da cobrança.
pix, pix_auto, boleto Deve conter exatamente um item.
1 elementshort_id do afiliado responsável pela venda. Deve estar com status
active e cadastrado para o produto informado.
40Código do cupom de desconto.
255Somente para boleto. Data de vencimento (YYYY-MM-DD). Deve ser
futura e respeitar o ticketExpiration do produto.
Somente para pix e pix_auto. Expiração do código Pix em segundos.
Mínimo 60. Deve respeitar o pixExpiresIn do produto.
x >= 60Response
Cobrança criada com sucesso.
Identificador único do pedido criado.
Código curto de referência do pedido.
Status inicial do pedido. Para Pix e Boleto, normalmente waiting_payment.
pix, pix_auto, boleto Valor final cobrado, em reais, como string decimal.
Identificador da transação no provedor.
URL do checkout Cakto.
Presente apenas para pix e pix_auto.
Presente apenas para boleto.
