Documentação — Escrituração de Despesas
Registro em lote de despesas dedutíveis vinculadas a um emitente, com validação individual por item e aceitação parcial.
1. Introdução
A API Escrituração de Despesas permite registrar, em lote, despesas dedutíveis vinculadas a um emitente já cadastrado através da API Receita Saúde.
Assim como a emissão de recibos, este endpoint envia as despesas para processamento junto à Receita Federal — útil para escrituração de despesas (ex: energia elétrica, aluguel) associadas à atividade do emissor.
2. Visão Geral
Esta API tem três características que a diferenciam do restante da plataforma Rebots:
Validação síncrona, resultado assíncrono
A resposta HTTP confirma apenas que o formato de cada item é válido e que não é duplicado — não garante que a despesa foi aceita pela Receita Federal. O resultado definitivo chega depois, pelo callback.
Aceitação parcial em lote
Itens com formato válido do array 'expenses' são aceitos para processamento mesmo que outros itens do mesmo lote sejam rejeitados na validação. Não é uma operação tudo-ou-nada.
Callback traz o resultado final
Diferente do que a resposta HTTP direta indica, o resultado completo (aceito ou rejeitado pela Receita Federal) só é conhecido depois do processamento e é informado exclusivamente pelo callback, num formato próprio.
A API opera sobre HTTPS, utiliza o mesmo token JWT da API Receita Saúde, e todas as respostas são em JSON.
3. Autenticação
A API Escrituração de Despesas utiliza exatamente o mesmo token de acesso da API Receita Saúde — não há uma autenticação separada.
Authorization: Bearer SEU_TOKEN_JWT_GERADOaccess_token, consulte a seção de Autenticação da documentação principal.4. Operações
4.1 Registro de Despesas (Lote)
- Ter um emissor ativo para o
issuer_codeinformado - Fora do ambiente sandbox, ter um endpoint de callback registrado (
/endpoint) — obrigatório antes de processar qualquer item do lote
Em ambiente sandbox, o endpoint de callback é opcional.
/receita-saude/v2/expensesCorpo da Requisição
{
"identificador": "CODIGO_DO_CLIENTE",
"issuer_code": "SEU_CODIGO_DE_EMISSOR",
"expenses": [
{
"id": 97077,
"date": "2026-07-28",
"accountCode": "P10.01.00014",
"value": 1177.51,
"description": "PAGAMENTO REF A ENERGIA ELETRICA"
},
{
"id": 97092,
"date": "2026-07-28",
"accountCode": "P10.01.00015",
"value": 1083.05,
"description": "PAGAMENTO REF A ALUGUEL"
}
]
}Envelope da Requisição
| Parâmetro | Tipo | Req. | Descrição |
|---|---|---|---|
| identificador | string | Obrigatório | Código de identificação do Cliente. |
| issuer_code | string | Obrigatório | Código do emissor já cadastrado na plataforma Rebots. |
| expenses | array | Obrigatório | Lote de despesas a registrar. Deve conter ao menos um item. |
Campos de cada item de "expenses"
| Parâmetro | Tipo | Req. | Descrição |
|---|---|---|---|
| id | integer | Obrigatório | ID único da despesa, definido por você. Único e imutável por emissor — reenviar um id já aceito é sempre rejeitado, nunca é tratado como atualização. |
| date | date | Obrigatório | Data da despesa, formato AAAA-MM-DD. Não pode ser uma data futura. |
| accountCode | string | Obrigatório | Código da conta no padrão A00.00.00000 (uma letra, 2 dígitos, ponto, 2 dígitos, ponto, 5 dígitos). Ex: P10.01.00014. |
| value | double | Obrigatório | Valor em reais. Deve ser maior que zero. Máximo permitido: 99.999.999,99. |
| description | string | Obrigatório | Descrição livre da despesa. Até 255 caracteres. |
Resposta de Sucesso — todos os itens aceitos para processamento (HTTP 200)
{
"success": true,
"issuer_code": "SEU_CODIGO_DE_EMISSOR",
"message": "All expenses accepted for processing.",
"accepted": [97077, 97092]
}Resposta — aceitação parcial (HTTP 200)
{
"success": false,
"issuer_code": "SEU_CODIGO_DE_EMISSOR",
"accepted": [97077],
"errors": [
{
"id": 97092,
"index": 1,
"error_code": "EXPENSES_ERROR_014",
"error_message": "Field 'accountCode' must follow the pattern A00.00.00000."
}
]
}| Parâmetro | Tipo | Req. | Descrição |
|---|---|---|---|
| id | integer | Opcional | ID do item rejeitado. Pode ser null se o próprio campo 'id' era inválido ou ausente. |
| index | integer | Obrigatório | Posição (a partir de 0) do item dentro do array 'expenses' enviado. |
| error_code | string | Obrigatório | Código do erro — ver seção 6. |
| error_message | string | Obrigatório | Descrição legível do erro. |
5. Sistema de Callback
Igual ao que ocorre na emissão de recibos, a resposta HTTP direta (seção 4.1) não traz o resultado final — ela confirma apenas que o formato dos itens é válido e que não são duplicados. O resultado definitivo, depois do processamento pela Receita Federal, chega exclusivamente pelo callback.
O callback reutiliza o mesmo endpoint registrado através da API Receita Saúde, e é disparado uma vez por request (não uma vez por item do lote).
5.1 Formato do Callback
{
"type": "expenses",
"issuer_code": "SEU_CODIGO_DE_EMISSOR",
"results": [
{ "id": 97077, "success": true },
{ "id": 97092, "success": false, "error": "Field 'accountCode' must follow the pattern A00.00.00000." }
]
}data — os campos ficam na raiz do payload.| Parâmetro | Tipo | Req. | Descrição |
|---|---|---|---|
| type | string | Obrigatório | Sempre "expenses" — identifica a origem do callback. |
| issuer_code | string | Obrigatório | Código do emissor do lote processado. |
| results | array | Obrigatório | Um item por despesa do request original, na mesma ordem — sucesso e falha inclusos. |
| Parâmetro | Tipo | Req. | Descrição |
|---|---|---|---|
| results[].id | integer | Opcional | ID da despesa. Pode ser null para itens com id inválido. |
| results[].success | boolean | Obrigatório | true se o item foi aceito e persistido, false se foi rejeitado. |
| results[].error | string | Opcional | Presente apenas quando success é false — mensagem legível do motivo da rejeição. |
6. Tratamento de Erros
Esta API tem dois níveis de erro, diferente do restante da plataforma Rebots:
- 01
Erros de Requisição
Interrompem o request inteiro — HTTP 400/403/404, corpo
{error_code, error_message}. Nenhum item do lote é processado. - 02
Erros de Item
Sempre retornam HTTP 200 (com
success: false), dentro do arrayerrorsda resposta — os demais itens do lote continuam sendo processados normalmente.
200OKRequisição processada (ver 'success' no corpo para saber se houve rejeições).400Bad RequestParâmetros inválidos ou ausentes no nível de requisição.401UnauthorizedToken ausente, inválido, expirado ou revogado.403ForbiddenEmissor desativado, ou (fora do sandbox) nenhum callback registrado.404Not FoundEmissor não encontrado.500Internal Server ErrorErro interno no servidor. Entre em contato com o suporte.Para uma lista completa de todos os códigos de erro (requisição e por item), consulte a Referência de Erros →
Documentação — Escrituração de Despesas · Versão 1.0
Última atualização: 29 de julho de 2026