Pagamentos
Todas as chamadas desta página partem do servidor do e-commerce, com a chave no cabeçalho
Authorization (Autenticação e idempotência). Os exemplos usam:
export WP_API=https://pay-api.staging.bloomx.cloud
export WP_KEY='wp_test.<key_id>.<segredo>'
Criar um pagamento: POST /v1/payments
Permissão payments:write. Exige Idempotency-Key.
curl -s -X POST "$WP_API/v1/payments" \
-H "Authorization: Bearer $WP_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: pedido-1234:autorizar' \
-d '{
"amount_cents": 15000,
"installments": 1,
"capture": true,
"external_reference": "pedido-1234",
"payment_source": { "source_type": "token", "token_id": "<tokenId do navegador>" },
"customer": {
"name": "Maria Teste",
"email": "maria@example.com",
"document": "12345678909",
"phone": "11999999999",
"address": {
"zip_code": "01001000",
"street": "Rua Teste",
"number": "100",
"complement": "Sala 1",
"district": "Centro",
"city": "Sao Paulo",
"state": "SP"
}
}
}'
| Campo do pedido | Obrigatório | Formato e regras |
|---|---|---|
amount_cents |
sim | inteiro, em centavos, a partir de 1 |
currency |
não | só BRL (padrão) |
installments |
não | de 1 a 18; padrão 1 |
capture |
não | true (padrão) autoriza e captura; false só pré-autoriza |
statement_descriptor |
não | texto da fatura do comprador, até 22 caracteres |
external_reference |
sim | o id do pedido no seu e-commerce, até 64 caracteres |
payment_source |
sim | de onde vem o cartão |
payment_source.source_type |
sim | token (cartão recém-digitado) ou card (cartão salvo) |
payment_source.token_id |
não | com source_type: token: o token_id de uso único do navegador |
payment_source.card_id |
não | com source_type: card: o card_id de POST /v1/cards |
payment_source.cvv |
não | opcional com card_id, 3 ou 4 dígitos; nunca é guardado |
customer |
sim | o comprador; todos os blocos abaixo são exigidos pela rede de cartões |
customer.name |
sim | até 120 caracteres |
customer.email |
sim | e-mail válido, até 120 caracteres |
customer.document |
sim | CPF (11 dígitos) ou CNPJ (14 dígitos), só dígitos, com dígitos verificadores válidos |
customer.phone |
sim | DDD e número, de 10 a 11 dígitos, só dígitos |
customer.address |
sim | endereço do comprador |
customer.address.zip_code |
sim | CEP com 8 dígitos, só dígitos |
customer.address.street |
sim | até 120 caracteres |
customer.address.number |
sim | de 1 a 10 caracteres |
customer.address.complement |
não | até 60 caracteres, ou null |
customer.address.district |
sim | bairro, até 60 caracteres |
customer.address.city |
sim | até 60 caracteres |
customer.address.state |
sim | sigla da UF, como SP |
metadata |
não | até 20 pares chave e valor simples, devolvidos na consulta |
Respostas:
| HTTP | Corpo | O que fazer |
|---|---|---|
| 201 | pagamento em captured (com capture: true) |
pedido pago |
| 201 | pagamento em pre_authorized (com capture: false) |
capture até expires_at |
| 200 | replay da mesma Idempotency-Key: o resultado original |
trate como a primeira resposta |
| 202 | pagamento em unknown |
não reenvie com outra chave; consulte ou espere o webhook (resultado ambíguo) |
| 4xx e 5xx | envelope de erro | veja Erros |
Guarde o id do pagamento: é ele que as outras rotas e o webhook usam. A resposta também traz o
cabeçalho Location com o endereço do pagamento.
Capturar uma pré-autorização: POST /v1/payments/{id}/capture
Permissão payments:write. Exige Idempotency-Key. Sem corpo, captura o valor total; com
amount_cents, captura parcialmente (até o valor autorizado).
curl -s -X POST "$WP_API/v1/payments/<id>/capture" \
-H "Authorization: Bearer $WP_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: pedido-1234:capturar' \
-d '{ "amount_cents": 15000 }'
A captura responde 200 com o pagamento em captured. A pré-autorização vale pelo número de dias de
preauth_ttl_days em GET /v1/capabilities (hoje, 7 dias); o fim da janela está em expires_at.
Depois disso, a captura recebe 422 preauth_expired. Um pagamento que não está em pre_authorized
recebe 409 invalid_state.
Cancelar ou estornar: POST /v1/payments/{id}/cancel
Permissão payments:write. Exige Idempotency-Key. A mesma rota desfaz uma pré-autorização ou
estorna um pagamento capturado. Sem corpo, estorna o saldo todo; com amount_cents, estorna
parcialmente.
curl -s -X POST "$WP_API/v1/payments/<id>/cancel" \
-H "Authorization: Bearer $WP_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: pedido-1234:estorno-1' \
-d '{ "amount_cents": 5000 }'
| Pagamento antes | Resultado |
|---|---|
pre_authorized |
canceled |
captured, estorno de parte do valor |
partially_refunded |
captured ou partially_refunded, estorno do saldo restante |
refunded |
Estorno acima do saldo recebe 422 amount_exceeds_refundable. Cada estorno parcial leva a sua
própria Idempotency-Key.
Consultar um pagamento: GET /v1/payments/{id}
Permissão payments:read. É a fonte da verdade sobre o pagamento e pode ser consultada a qualquer
momento.
curl -s "$WP_API/v1/payments/<id>" -H "Authorization: Bearer $WP_KEY"
| Campo da resposta | O que é |
|---|---|
id |
id do pagamento (UUID) |
external_reference |
o id do pedido que você enviou |
status |
status atual (tabela abaixo) |
capture_mode |
auto (capture: true) ou manual (capture: false) |
amount_cents, captured_cents, refunded_cents |
valor autorizado, capturado e estornado, em centavos |
currency, installments, statement_descriptor |
como enviados na criação |
card.brand, card.last4, card.card_id |
bandeira, quatro últimos dígitos e o cartão salvo, quando houver |
customer.name, customer.email |
o comprador (documento, telefone e endereço nunca voltam) |
provider.authorization_code, provider.nsu, provider.tid |
identificadores da transação na rede de cartões |
provider.declined_code |
código da recusa, quando houver |
metadata |
o que você enviou na criação |
expires_at |
fim da janela de captura de uma pré-autorização |
created_at, authorized_at, captured_at, canceled_at, refunded_at |
datas em UTC (ISO 8601) |
operation |
a última operação (kind, state), quando a resposta vem de uma operação |
error |
code, message e retryable do último erro, quando houver |
Listar pagamentos: GET /v1/payments
Permissão payments:read. Lista do mais novo para o mais antigo, em páginas.
curl -s "$WP_API/v1/payments?status=captured&limit=20" -H "Authorization: Bearer $WP_KEY"
| Parâmetro | Uso |
|---|---|
status |
filtra por status |
external_reference |
filtra pelo id do pedido |
limit |
itens por página, de 1 a 100; padrão 20 |
cursor |
o next_cursor da página anterior |
A resposta traz items (os pagamentos) e next_cursor, que vem null na última página.
Guardar o cartão: POST /v1/cards
Permissão cards:write. Troca um token_id por um cartão guardado no cofre do provedor, para
cobrar de novo sem pedir o cartão ao comprador. O token é consumido aqui: para pagar na mesma hora,
gere outro token_id.
curl -s -X POST "$WP_API/v1/cards" \
-H "Authorization: Bearer $WP_KEY" \
-H 'Content-Type: application/json' \
-d '{ "token_id": "<tokenId do navegador>" }'
{ "card_id": "<card_id>", "status": "active", "brand": "mastercard", "last4": "0020",
"expiration_month": "12", "expiration_year": "2030", "holder_name": "MARIA TESTE" }
Depois, pague com "payment_source": { "source_type": "card", "card_id": "<card_id>" }. Guarde o
card_id associado ao cliente no seu sistema; ele só serve com a chave do seu estabelecimento.
Status do pagamento
| Status | Significado |
|---|---|
pending |
criado; a autorização ainda não terminou |
pre_authorized |
autorizado e aguardando captura |
capturing |
captura em curso |
captured |
capturado: o pagamento está pago |
cancelling |
cancelamento em curso |
canceled |
pré-autorização desfeita; nada foi cobrado |
refunding |
estorno em curso |
partially_refunded |
parte do valor capturado foi estornada |
refunded |
todo o valor capturado foi estornado |
charged_back |
o comprador contestou a compra com o emissor (chargeback) |
expired |
pré-autorização não capturada dentro da janela |
failed |
não autorizado; nada foi cobrado |
unknown |
resultado ambíguo, em conciliação (resultado ambíguo) |