Bearer pela sua API Key real (vk_live_* produção, vk_test_* sandbox). Crie a chave em https://app.dotfy.com.br/dashboard/chaves-api. Sem o header → 401. Com chave inválida/revogada → 401. Com chave sem o escopo necessário → 403 insufficient_scope.charges:write (Bearer API Key).POST /api/charges, mas para cartão.User.rawCardApiEnabled). Sem ele → 403. Contas de teste (isTestUser) → 400. Além disso, o processamento de cartão (nosso processador de cartão) precisa estar disponível na plataforma.cardLastFour) e a bandeira (cardBrand).| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
value | number | sim | Valor em REAIS (ex: 149.90). Livre, > 0. |
installments | int | não | Parcelas, 1–12. Default: 1. |
description | string | não | Descrição/statement. Respeita a preferência de envio ao adquirente da conta. |
correlationID | string | não (recomendado) | Alias externo único para conciliação e idempotência de retry. Se repetido → 409. Sem ele, um retry pode gerar cobrança duplicada. |
webhook_url | string | não | URL HTTPS para o webhook desta cobrança (sobrescreve endpoints estáticos). |
customer.name | string | sim | Nome do titular/comprador. |
customer.email | string | sim | Email válido (antifraude). |
customer.taxID | string | sim | CPF (11 dígitos) ou CNPJ (14 dígitos). Apenas números. |
customer.phone | string | não | Formato E.164 (ex: +5511999998888). |
card.number | string | sim | PAN do cartão. Nunca armazenado. |
card.holderName | string | sim | Nome impresso no cartão. |
card.expMonth | int | sim | Mês de expiração (1–12). |
card.expYear | int | sim | Ano de expiração (4 dígitos, ex: 2030). |
card.cvv | string | sim | Código de segurança. Nunca armazenado. |
billing.street | string | sim | Endereço de cobrança — logradouro. |
billing.number | string | não | Número (opcional). |
billing.zip | string | sim | CEP (apenas números). |
billing.city | string | sim | Cidade. |
billing.state | string | sim | UF (2 letras). |
billing.country | string | não | País ISO-2 (default BR). |
billingé OBRIGATÓRIO — o nosso processador de cartão exigebilling_addressno processamento de cartão.
200 OK com { id, correlationId, paymentMethod: "CARD", status, cardLastFour, cardBrand, installments, amount, paid, userMessage }. amount em centavos.200 — processado na hora (paid: true aprovado; paid: false = ainda em processamento).202 — em processamento (status: "processing"): resultado INDETERMINADO (timeout/instabilidade do adquirente). A captura PODE ter ocorrido — NÃO reenvie com o mesmo cartão; aguarde o webhook EVENT:CHARGE_PAID (conciliar pelo correlationID).400 — cartão recusado / dados inválidos.403 — conta sem o switch de cartão via API (ou modo de teste).409 — correlationID já usado (idempotência): já existe uma cobrança com esse id.EVENT:CHARGE_PAID pela via padrão — concilie pelo correlationID.curl --location '/api/card-payments' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"value": 149.9,
"installments": 1,
"description": "Pedido #123",
"correlationID": "order_123",
"customer": {
"name": "Maria Silva",
"email": "maria@exemplo.com",
"taxID": "12345678901",
"phone": "+5511999998888"
},
"card": {
"number": "4000000000000010",
"holderName": "MARIA SILVA",
"expMonth": 12,
"expYear": 2030,
"cvv": "123"
},
"billing": {
"street": "Av Paulista",
"number": "1000",
"zip": "01310100",
"city": "Sao Paulo",
"state": "SP",
"country": "BR"
}
}'{
"id": "clch_card_001",
"correlationId": "order_123",
"paymentMethod": "CARD",
"status": "paid",
"cardLastFour": "0010",
"cardBrand": "visa",
"installments": 1,
"amount": 14990,
"paid": true,
"userMessage": "Pagamento aprovado com sucesso"
}