O movimento do mês, já conferido
Contas com saldo de abertura e de fechamento, títulos com os valores decompostos em bruto, multa, juros e desconto, as baixas com o identificador da linha do extrato bancário — e uma conferência que diz o que está faltando e onde consertar no portal. Uma chamada por mês.
Peça o token
A quem administra o portal. O portal guarda só o hash — se perder, pede outro.
Confira que ele vale
acao=saude diz o que o token enxerga e quantas chamadas sobram no minuto.
Puxe o mês
acao=lancamentos&competencia=2026-09. Sem competência, vem o mês passado.
curl -H "Authorization: Bearer SEU_TOKEN" \ "https://upsyconsult.com.br/api_ctb.php?acao=lancamentos&competencia=2026-09"
Dinheiro vem como texto — e isso é de propósito
Todo campo de valor vem como string decimal com duas casas e ponto:
"7805.58", nunca 7805.58 como número.
Ponto flutuante não tem o número 7805,58 — tem o vizinho binário mais próximo. Dependendo da configuração do PHP do servidor, o JSON sai assim:
"valor_total": 7805.579999999999927240423858165740966796875 "valor_total": "7805.58"
Aconteceu de verdade, na primeira chamada. Num relatório que vai para a
contabilidade é inaceitável, e some ou volta conforme o servidor. String
decimal é inequívoca, não depende de configuração nenhuma, e
jq, Excel e qualquer robô leem sem susto.
No seu código, converta para decimal — não para float.
| Linguagem | Faça assim |
|---|---|
| Python | Decimal(l["valor_total"]) |
| PHP | bcadd($l['valor_total'], '0', 2) |
| JavaScript | uma biblioteca de decimal, ou trate como texto |
| Excel | importa direto, é só marcar a coluna como número |
O que ainda não existe
Escrita — a contabilidade devolver a classificação contábil para o
portal — está desenhada e entra numa versão 2. A versão 1 continua
funcionando quando isso acontecer: o campo classificacao de
cada lançamento já vem na resposta, hoje sempre null,
justamente para não quebrar seu código no dia em que passar a vir
preenchido.
Por ora, qualquer método que não seja GET responde
405 metodo_nao_permitido — e diz isso, em vez de só devolver o número.
A referência
Gerada do openapi.yaml, que é o contrato. Clique em Authorize, cole o token, e o Try it out funciona contra o portal de verdade — nenhuma chamada daqui altera nada, a versão 1 é somente leitura.
A referência não carregou
A página abriu, mas o openapi.yaml não veio. Quase sempre é um destes:
- os quatro arquivos precisam estar na mesma pasta:
index.html,openapi.yaml,swagger-ui-bundle.jseswagger-ui.css; - a página foi aberta direto do disco (
file://) em vez de pelo endereço do site — o navegador bloqueia a leitura do YAML assim; - o servidor não entrega arquivos
.yaml.