Skip to main content
Payment intents são a superfície voltada ao integrador. Você mantém seu próprio CMS de faturas ou ERP e faz POST de um “intent” enxuto descrevendo o que cobrar, quem é o comprador e (opcionalmente) o que renderizar na página de pagamento hospedada. A Caratuva roda o KYC do comprador, coleta o pagamento, transfere internacionalmente, faz câmbio e repassa o BRL via PIX, do começo ao fim. O endpoint retorna uma hostedPaymentUrl que você encaminha ao cliente. Seu cliente entra com magic link no e-mail, completa KYC se ainda não tiver feito, e paga. Você fica sabendo de cada transição via webhooks de saída.

Quando usar isto vs. invoices

  • POST /v1/payments — seu CMS é dono da fatura; a Caratuva é o motor de pagamento + compliance + liquidação. Pula a etapa de aprovação do lado do vendedor (a chamada de API é a aprovação).
  • POST /v1/invoices — o painel da Caratuva é dono da fatura. Vendedores criam, um colega aprova caso sua organização exija aprovação, e a plataforma envia o magic link. Use se você não tem sistema de faturamento próprio.
KYC do comprador é obrigatório nos dois fluxos. Não há caminho para pular o KYC em qualquer superfície de pagamento.

Pré-requisitos

  1. KYB aprovado. Sua organização precisa ter completado o KYB e ter uma conta virtual provisionada. Caso contrário, a API retorna 400 KybNotApproved.
  2. Chave de API. Uma chave de produção (pk_live_...) — veja Chaves de API.
  3. Inscrição de webhook. Você vai querer uma antes de criar intents em produção — veja Webhooks.

Criar um payment intent

Corpo da requisição

Idempotência

Envie Idempotency-Key: <uuid> em toda retentativa do mesmo create lógico. Replays retornam a resposta original sem reexecutar efeitos colaterais. Duas chaves distintas com o mesmo externalId colapsam para o mesmo intent (o externalId por organização é único).

Resposta

hostedPaymentUrl é o único campo de que a maioria dos integradores precisa da resposta. Encaminhe ao cliente pelo seu canal (e-mail, SMS, mensagem no app). A Caratuva não envia e-mail automático ao comprador quando um payment intent é criado — isso é responsabilidade do integrador nesta superfície, porque você é dono do relacionamento.

Jornada do comprador na página hospedada

Quando o comprador clica em hostedPaymentUrl, ele:
  1. Chega no portal do comprador (pay.caratuva.com/r/<publicId>) e vê o seu bloco display mais o nome do vendedor.
  2. Informa o e-mail; recebe um magic link; entra (sessão gerenciada pela Caratuva).
  3. Completa o KYC se o kycStatus ainda não for approved. A etapa é obrigatória — sem fast-forward. Um comprador que voltou e já está verificado em outro fluxo pula essa etapa.
  4. Confirma a cotação de câmbio e completa o pagamento.
  5. A Caratuva roda a transferência internacional e o repasse PIX para a conta BRL do vendedor.
  6. O comprador é redirecionado para returnUrl se definido; caso contrário, vê uma página de confirmação da Caratuva.
Cada transição dispara um webhook para o seu ERP manter o status do pedido em sincronia.

Máquina de estados

Intents criados via API pulam a aprovação do vendedor (awaiting_approval / approved) e começam em awaiting_buyer. A partir daí:
Estados terminais de falha: failed, cancelled, expired.

Ler um intent

Cancelar um intent

Válido apenas antes do início do repasse em BRL. Após settled, cancele o pedido no seu sistema.

Erros

Todas as respostas de erro compartilham o envelope { statusCode, error, message }.