Valores em centavos
Todo valor monetário é um inteiro positivo em centavos. Não há decimais, strings nem símbolo de moeda.125.50 falha na validação.
Identificadores
Identificadores são UUIDs e vão como segmento de caminho:422), não 404.
Referências a outras entidades
Um campo que aponta para outra entidade tem o nome da entidade, sem sufixoId: customer, price, card.
- Em requisições, aceita o id da entidade (e, onde indicado, um objeto para criá-la na hora, como
customerem cobranças). - Em respostas, traz o id por padrão e o objeto completo quando você pede com
?includes=<entidade>(nos endpoints que suportam). - Em payloads de webhook, vem sempre o id.
Datas
Timestamps são strings ISO 8601 em UTC:Formato
EnvieContent-Type: application/json em toda requisição com corpo. Respostas são JSON, exceto 204 No Content, que vem sem corpo.
Corpos de PATCH são parciais: campos omitidos não mudam. Para limpar um campo anulável, envie null.
Listas e paginação
Endpoints de listagem devolvem:data vem do mais recente para o mais antigo (por createdAt) e count é o total de registros da conta. A maioria das listagens aceita page (a partir de 1, padrão 1) e limit (padrão 15). Subcontas usam limit e offset, e os logs de entrega de webhook não são paginados. Cada página da Referência indica os parâmetros do endpoint.
Idempotência
POST /cards e POST /3ds/sessions aceitam o header Idempotency-Key (até 255 caracteres). Por 24 horas, repetir a chave com o mesmo corpo devolve o mesmo recurso. A mesma chave com corpo diferente retorna 409 idempotency_key_reused. As chaves são isoladas por conta.
{ idempotencyKey } como último argumento.
Escopo da conta
Toda leitura e escrita é restrita à conta da chave. Um recurso de outra conta responde404, e não 403, para que ids alheios sejam indistinguíveis de ids que não existem.
Ambientes
O ambiente é o host:https://api.upag.dev/v1 (sandbox, chaves *_test_) e https://api.upag.io/v1 (produção). Veja Autenticação e o Simulador.