Pular para o conteúdo principal
Toda operação de transação age sobre um espaço: /v1/spaces/{space_id}/transactions. Uma transação fora desse espaço recebe 404 NOT_FOUND, igual a uma que não existe.

O objeto da transação

Leia amount com um tipo decimal, não com ponto flutuante, para não perder nenhum centavo.

Liste e exporte seu histórico

GET /v1/spaces/{space_id}/transactions devolve uma página, das mais novas para as mais antigas. A ordem é fixa: transacted_at decrescente, depois id. Cada resposta traz next_cursor. Envie esse valor em after para ler a próxima página, com os mesmos filtros. Na última página, next_cursor é null. O cursor é opaco: não monte nem altere esse valor.
Uma transação com data futura só aparece quando to_date inclui a data dela.
Este script exporta um ano de histórico para um arquivo JSON Lines. Ele precisa de curl e jq:
Com a CLI visor, a mesma exportação cabe em uma linha: visor tx list --from 2026-01-01 --to 2026-12-31 --all --json | jq --compact-output '.data[]' > transactions.jsonl
Cada página conta no limite de requisições de 60 por minuto, então páginas de 100 exportam 6.000 transações por minuto. Uma transação que chega enquanto você percorre a lista não muda as linhas que você ainda não leu. Se uma sincronização adicionar uma transação mais antiga atrás da sua posição, leia aquele período de novo.

Veja uma transação

GET /v1/spaces/{space_id}/transactions/{transaction_id} devolve uma transação.

Registre uma transação

POST /v1/spaces/{space_id}/transactions registra uma transação manual. Ela exige o escopo pfm:transactions:write e o header Idempotency-Key. Registre gastos numa conta manual. Uma conta conectada já recebe todas as transações do banco, então um registro manual nela pode contar duas vezes. Um campo fora desta tabela recebe 400 BAD_REQUEST. Um valor inválido ou um ID de outro espaço recebe 422 VALIDATION_FAILED, e o Visor não registra nada. O guia de primeiros passos tem um exemplo completo.

Registre transações em lote

POST /v1/spaces/{space_id}/transactions/batch registra de 1 a 100 transações. Ela exige o escopo pfm:transactions:write. Envie um objeto com uma lista transactions. Cada linha aceita os campos da criação individual e exige seu próprio idempotency_key. A chave aceita de 1 a 128 letras, dígitos ou - _ . :, como o header da criação individual. O lote não exige o header Idempotency-Key.
Um lote válido devolve 200 OK. A lista data traz um resultado por linha, na mesma ordem da entrada: Cada linha é salva de forma independente. Uma falha não desfaz os sucessos nem impede as próximas linhas. Um valor inválido devolve VALIDATION_FAILED com details.errors; uma linha malformada traz seu próprio erro. O objeto do lote deve conter apenas transactions, com 1 a 100 linhas. Um objeto malformado, uma lista vazia ou mais de 100 linhas devolve 400 BAD_REQUEST antes de registrar qualquer transação. Para tentar de novo, mantenha a chave original de cada linha. A mesma conta e chave compartilham o registro de idempotência da criação individual, então a nova tentativa devolve replayed sem criar outra transação. Mudar o valor, tipo, descrição, data ou categoria devolve IDEMPOTENCY_CONFLICT naquela linha. A mesma chave pode criar outra transação em outra conta. Cada lote conta como uma requisição no limite do token.

Edite uma transação

PATCH /v1/spaces/{space_id}/transactions/{transaction_id} muda só os campos do corpo. Ela exige o escopo pfm:transactions:write.
  • tag_ids substitui todas as tags. Uma lista vazia remove todas. Sem tag_ids, as tags continuam.
  • Um texto vazio em notes remove as notas. null não é aceito.
  • A edição é atômica. Se um valor for inválido, nada muda.
  • A conta de uma transação não muda.

Exclua uma transação

DELETE /v1/spaces/{space_id}/transactions/{transaction_id} devolve 204 No Content. Ela exige o escopo pfm:transactions:write.
  • O Visor apaga uma transação manual e desfaz o efeito dela no saldo da conta.
  • O Visor oculta uma transação conectada, para que a próxima sincronização do banco não a traga de volta.
  • Uma transação da qual outro registro depende, como uma parcela paga, recebe 409 TRANSACTION_CONFLICT.