Clientes internacionais

Cartão internacional: UI e checkout de vocês, cobrança pela API Reborn. Sem PIX nem payment link.

Este guia é para quem processa cartão internacional com perfil internacional. A API aceita as moedas de presentment das contas habilitadas (Américas e/ou Europa) — USD, CAD, EUR, GBP e as demais da região. A autenticação é a mesma da API de seller: X-Api-Key gerada em Integrações. Base sandbox: https://sandbox-api.rebornpay.io. Sempre envie Idempotency-Key na criação da transação.

ModoQuando usarStatus
Direct APICheckout e UI de vocês. O servidor chama POST /v1/transactions; o 3DS completa no browser com o cliente Reborn.Disponível agora
Reborn ElementsCollect (PCI) e confirmação 3DS no browser. Payment Element e hosted internacionais entram depois.Disponível agora — payments.collect / payments.confirm

A integração internacional é HTTP na API Reborn + @rebornpay/elements no browser. O servidor cria a cobrança com sk_; o browser usa pk_ só para Collect e 3DS. Em Integrações, cadastre as origens do checkout próprio na publishable key — isso libera CORS para Collect e 3DS. Não use SDK de adquirente. Payment Element e hosted internacionais entram no mesmo pacote depois.

  • Checkout sessions, payment links, PIX
  • POST /v1/transactions/threeds/* e @rebornpay/checkout-3ds — 3DS do checkout Brasil
  • card.cardToken do tokenize Brasil — recusado no path internacional
  • transactions.runThreeDs no Elements — mesmo fluxo Brasil
  • Parcelas: installments deve ser 1

Enquanto o Card Vault não estiver salvo no dashboard, a API aceita PAN de teste em claro. Cartões: 4242424242424242 (sucesso), 4000002500003155 (3DS), 4000000000000002 (recusa). Envie currency no ISO da cobrança (ex. USD, EUR, JPY). Com as duas regiões ativas, moedas europeias vão para a conta Europa; o restante, para as Américas. A lista completa vem em allowedCurrencies do perfil internacional.

POST /v1/transactions — PAN de teste
{
  "paymentMethod": "CREDIT_CARD",
  "amount": 100,
  "currency": "USD",
  "description": "Pedido sandbox",
  "buyer": {
    "name": "Jane Doe",
    "email": "jane@example.com"
  },
  "card": {
    "number": "4242424242424242",
    "expirationMonth": "12",
    "expirationYear": "28",
    "cvv": "123",
    "holderName": "JANE DOE"
  }
}
cURL
curl -X POST "https://sandbox-api.rebornpay.io/v1/transactions" \
  -H "X-Api-Key: rk_test_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @charge.json

Se a resposta vier PENDING com pendingAction.clientSecret, complete o desafio no browser com reborn.payments.confirm. O SDK usa pendingAction.publishableKey (ou GET /v1/payments/config) — não cole chave de 3DS no frontend.

Confirm: POST /v1/transactions/{id}/3ds/confirm com a pk_ e clientSecret no body. Com sk_ o body é opcional.

payments.confirm após pendingAction
import { loadElements } from "@rebornpay/elements";

const reborn = await loadElements({
  publishableKey: "pk_test_...",
  apiBaseUrl: "https://sandbox-api.rebornpay.io",
});

// created = resposta de POST /v1/transactions no seu servidor (sk_)
if (created.status === "PENDING" && created.pendingAction?.clientSecret) {
  await reborn.payments.confirm({
    transactionId: created.id,
    clientSecret: created.pendingAction.clientSecret,
    publishableKey: created.pendingAction.publishableKey,
  });
}

Cadastre a URL no dashboard (ou via API de webhooks). Eventos deste fluxo: TRANSACTION_PAID e TRANSACTION_REFUNDED. O payload traz o mesmo objeto da API pública, incluindo feeAmount e netAmount em centavos. Detalhes em Webhooks.

Estorno: POST /v1/transactions/{id}/refunds.

O cofre é de vocês. A Reborn nunca vê PAN: o Collect tokeniza no browser; a API recebe aliases; o hop até a adquirência acontece no outbound do vault. No SDK:

payments.collect.mount + tokenize
import { loadElements } from "@rebornpay/elements";

const reborn = await loadElements({
  publishableKey: "pk_test_...",
  apiBaseUrl: "https://sandbox-api.rebornpay.io",
});

const collect = await reborn.payments.collect.mount("#card-fields");
const card = await collect.tokenize();

// No seu servidor, com sk_:
// POST /v1/transactions  { card: { vault: "CARD", ...card }, currency, amount, ... }

  1. Seller app → Integrações → Card Vault (visível só no perfil internacional).
  2. Host, usuário e senha do outbound (a senha nunca volta no GET).

Depois que o vault estiver conectado, PAN cru é recusado. Toda charge precisa de card.vault=CARD e aliases no number / cvv.

A rota outbound e o reveal dos campos são configurados com o time Reborn — não publique destino de adquirente em repositório ou frontend.

number e cvv são aliases do Collect — não dígitos do cartão. Envie lastDigits e bin (o Collect costuma expor) para dashboard e antifraude; a Reborn não infere last4 do alias.

POST /v1/transactions — Card Vault
{
  "paymentMethod": "CREDIT_CARD",
  "amount": 100,
  "currency": "USD",
  "description": "Pedido sandbox",
  "buyer": {
    "name": "Jane Doe",
    "email": "jane@example.com"
  },
  "card": {
    "vault": "CARD",
    "number": "tok_...",
    "cvv": "tok_...",
    "expirationMonth": "12",
    "expirationYear": "28",
    "holderName": "JANE DOE",
    "lastDigits": "4242",
    "bin": "424242"
  }
}

TesteEsperado
USD 4242 sem vaultPAID (ou PENDING → webhook TRANSACTION_PAID)
EUR 3DSpendingAction → 3DS Reborn → confirm → PAID
RefundTRANSACTION_REFUNDED
Alias do Card VaultPAID; core sem PAN
PAN depois do vault salvo4xx pedindo vault=CARD