Menu da documentação
Guias
Valores e formatos
Valores em centavos
Todo valor na API é um inteiro em centavos: no pedido, na resposta e nos webhooks.
| Em reais | Na API |
|---|---|
| R$ 125,50 | 12550 |
| R$ 1.234,56 | 123456 |
| R$ 0,01 | 1 |
| R$ 80,00 | 8000 |
- Nunca envie decimal (
125.50) nem texto ("12550"): oamountprecisa ser inteiro, senão422 validation_failed. - Não use
floatpara dinheiro no seu sistema:0.1 + 0.2não dá0.3. Guarde centavos em inteiro e converta para reais só na tela. - A moeda é sempre
BRL.
Conversão só na hora de mostrar:
$cents = 12550;
echo 'R$ '.number_format(intdiv($cents, 100), 0, ',', '.').','.str_pad((string) ($cents % 100), 2, '0', STR_PAD_LEFT); // R$ 125,50
const cents = 12550;
new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(cents / 100); // "R$ 125,50"
cents=12550; printf 'R$ %d,%02d\n' $((cents / 100)) $((cents % 100)) # R$ 125,50
Para somar ou comparar (por exemplo, a composição de um pagamento de conta), some os inteiros, nunca os valores em reais.
Datas
- Formato ISO 8601 com fuso:
2026-11-03T14:30:00-03:00. - A API devolve em UTC:
2026-11-03T17:30:00+00:00é o mesmo instante. Converta para o fuso de quem lê só na tela. - Na entrada, aceita qualquer fuso. Mande sempre o fuso: sem ele, o horário é lido como UTC.
expires_atprecisa estar no futuro; sem ele, o PIX vale 30 min.- Datas sem horário (o
due_datedo pagamento de conta, planejado) usamAAAA-MM-DD.
IDs com prefixo
Todo ID tem o prefixo do tipo e um ULID em minúsculas (26 caracteres):
| Prefixo | Objeto | Situação |
|---|---|---|
pay_ |
Pagamento | ✅ |
inst_ |
Instalação de gateway (no campo gateway do pedido e no objeto) |
✅ |
rs_, rule_ |
Conjunto de regras e regra de roteamento | ✅ |
evt_ |
Evento de webhook | ✅ |
bpay_ |
Pagamento de conta | ✅ |
ref_ |
Estorno | Planejado |
po_ |
Saque | Planejado |
pm_ |
Cartão salvo | Planejado |
- Trate o ID como texto opaco: não extraia data do ULID nem monte IDs à mão.
- ID com prefixo errado ou de outro tenant responde
404 not_found. - Exceções de hoje: o
tenant.iddeGET /v1/mee orequest_idsaem sem prefixo. Orequest_idé um ULID em maiúsculas, o mesmo do headerX-Request-Id. gateway.provider_payment_idé o ID da cobrança no gateway (no Asaas,pay_…também, mas é outro sistema). Não o confunda com oiddo Pagaki.
Dados pessoais mascarados
Os dados do pagador são guardados criptografados e sempre saem mascarados, nas respostas e nos webhooks. Para casar um pagamento com o seu cadastro, use external_id ou metadata, nunca o documento.
| Campo | Você envia | A API devolve |
|---|---|---|
payer.name |
Fulano de Tal |
F***** d* T** |
payer.document (CPF) |
12345678909 ou 123.456.789-09 |
***.456.789-** |
payer.document (CNPJ) |
12345678000190 |
**.345.678/0001-** |
payer.email |
fulano@example.com |
f***@example.com |
payer.phone |
+5582999998888 ou 82999998888 |
+55 82 *****-8888 |
Valor fora do formato esperado vira ***: a API nunca devolve o dado original.
Texto livre
| Campo | Limite |
|---|---|
description, external_id |
255 caracteres |
metadata |
20 chaves; chave até 40 caracteres; valor só texto, até 500 caracteres (mande "1234", não 1234) |
payer.name, payer.email |
255 caracteres |
payer.phone |
30 caracteres |
Não ponha dado pessoal em description, external_id nem metadata: esses campos voltam sem máscara.
Campos novos
A API pode ganhar campos, eventos e códigos de erro sem mudar de versão. Ignore o que você não conhece em vez de recusar a resposta.