Skip to content

Despesas ​

Registar despesas pagas diretamente por um condomínio, em caixa ou pelo banco, sem fatura de fornecedor. Por exemplo, impressões e envelopes, portes de correio ou pequenas compras.

Para uma despesa titulada por uma fatura de fornecedor, use as faturas de fornecedor.

O registo usa três listagens, todas com masterdata:read: as contas de despesa, as respetivas rubricas e as contas por onde o condomínio paga. Os condomínios vêm de /buildings.

Peça expenses:write e masterdata:read

A permissão expenses:write só dá acesso ao registo. Os identificadores que o registo exige (condomínio, conta, rubrica e conta de pagamento) vêm das listagens, que pedem masterdata:read.

Listar as contas de despesa ​

GET /expense-accounts

Permissão · masterdata:read

As contas onde se pode lançar uma despesa. Valem para todos os condomínios da empresa.

Pedido ​

bash
curl "https://servidor.exemplo/api/integrations/v1/acme/expense-accounts" \
  -H "ApiKey: $GC_API_KEY"

Resposta · 200 ​

Um array simples, sem envelope.

json
[
  { "Id": 412, "Account": "6226", "Description": "Comunicação", "RequiresCategory": true },
  { "Id": 430, "Account": "6262", "Description": "Despesas de representação", "RequiresCategory": false }
]
CampoTipoDescrição
IdinteiroIdentificador da conta. É o que se envia em IdAccount
AccounttextoNúmero da conta no plano de contas
DescriptiontextoDescrição da conta
RequiresCategorybooleanoA conta tem rubricas e uma despesa lançada nela tem de indicar uma

Erros ​

EstadoCódigoQuando
401 · 403Ver Autenticação e Permissões

Listar as rubricas ​

GET /expense-categories

Permissão · masterdata:read

Parâmetros ​

ParâmetroTipoPor omissãoDescrição
idAccountinteirotodasSó as rubricas desta conta

Pedido ​

bash
curl "https://servidor.exemplo/api/integrations/v1/acme/expense-categories?idAccount=412" \
  -H "ApiKey: $GC_API_KEY"

Resposta · 200 ​

json
[
  { "Id": 57, "Code": "01", "Description": "Correio e economato", "IdAccount": 412 },
  { "Id": 58, "Code": "02", "Description": "Telefone", "IdAccount": 412 }
]
CampoTipoDescrição
IdinteiroIdentificador da rubrica. É o que se envia em IdCategory
CodetextoCódigo da rubrica
DescriptiontextoDescrição da rubrica
IdAccountinteiroA conta a que a rubrica pertence

Cada rubrica pertence a uma única conta, e só se pode usar com essa conta.

Erros ​

EstadoCódigoQuando
401 · 403Ver Autenticação e Permissões

Listar as contas de pagamento de um condomínio ​

GET /buildings/{idBuilding}/payment-accounts

Permissão · masterdata:read

As contas por onde o condomínio pode pagar uma despesa: as suas contas bancárias abertas e as contas de caixa.

Pedido ​

bash
curl "https://servidor.exemplo/api/integrations/v1/acme/buildings/12/payment-accounts" \
  -H "ApiKey: $GC_API_KEY"

Resposta · 200 ​

json
[
  { "Id": 1201, "Account": "12101", "Description": "Banco A - Ordem", "Kind": "bank", "IsDefault": true },
  { "Id": 1202, "Account": "12102", "Description": "Banco B - Ordem", "Kind": "bank", "IsDefault": false },
  { "Id": 111, "Account": "111", "Description": "Caixa", "Kind": "cash", "IsDefault": true }
]
CampoTipoDescrição
IdinteiroIdentificador da conta. É o que se envia em IdPaymentAccount
AccounttextoNúmero da conta no plano de contas
DescriptiontextoDescrição da conta
Kindtextobank ou cash
IsDefaultbooleanoA conta usada quando a despesa não indica nenhuma. Há no máximo uma de cada tipo

As contas de caixa são as mesmas em todos os condomínios. As bancárias são as de cada condomínio.

Erros ​

EstadoCódigoQuando
401 · 403Ver Autenticação e Permissões
404BUILDING_NOT_FOUNDNão existe condomínio com esse identificador

Registar uma despesa ​

POST /expenses

Permissão · expenses:write · aceita Idempotency-Key

Envie sempre uma Idempotency-Key

O GC não deteta despesas repetidas: não existe um número de documento pelo qual se possa reconhecer uma despesa já lançada. Se um pedido expirar e o repetir sem chave, ou com uma chave nova, a despesa fica lançada duas vezes na contabilidade do condomínio.

Gere uma chave por despesa antes do primeiro envio e reutilize-a em todas as repetições. Ver Idempotência.

Uma despesa tem uma ou mais linhas, cada uma com a sua conta, rubrica, descrição e valor. O total é a soma das linhas e sai da conta de pagamento.

Corpo ​

CampoTipoDescrição
IdBuildinginteiroObrigatório. O condomínio
DocumentIdtextoNúmero do documento, quando existe. Aparece na descrição do lançamento
DocumentDatedataObrigatório. Data do documento. É a data do lançamento
PaymentModetextoObrigatório. cash, transfer ou check
IdPaymentAccountinteiroA conta por onde se paga, de /payment-accounts. Sem ela, usa-se a que tem IsDefault
AttachmentFileNametextoNome do ficheiro. Obrigatório quando se envia o ficheiro
AttachmentBase64textoO documento, em base64
LineslistaObrigatório. Pelo menos uma linha

Cada linha de Lines:

CampoTipoDescrição
IdAccountinteiroObrigatório. A conta de despesa, de /expense-accounts
IdCategoryinteiroA rubrica, de /expense-categories. Obrigatória quando a conta tem RequiresCategory
DescriptiontextoObrigatório. Descrição da despesa
AmountdecimalObrigatório. Valor, maior que zero, com IVA incluído

Pedido ​

bash
curl -X POST "https://servidor.exemplo/api/integrations/v1/acme/expenses" \
  -H "ApiKey: $GC_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
        "IdBuilding": 12,
        "DocumentId": "ECO 2026/10",
        "DocumentDate": "2026-10-31",
        "PaymentMode": "transfer",
        "AttachmentFileName": "economato-outubro.pdf",
        "AttachmentBase64": "JVBERi0xLjQK...",
        "Lines": [
          { "IdAccount": 412, "IdCategory": 57, "Description": "Impressões e envelopes de outubro", "Amount": 18.45 }
        ]
      }'

Resposta · 201 ​

json
{ "Id": 90321, "Reference": "2026/P/0412" }
CampoTipoDescrição
IdinteiroIdentificador do lançamento contabilístico
ReferencetextoReferência do lançamento, como aparece nos ecrãs e relatórios da aplicação

Os modos de pagamento ​

ValorSignificadoPaga por
cashCaixaUma conta de caixa (Kind cash)
transferTransferência bancáriaUma conta bancária do condomínio (Kind bank)
checkChequeUma conta bancária do condomínio (Kind bank)

O IdPaymentAccount tem de ser do tipo que o modo usa: uma conta de caixa num pagamento por transferência responde 400 INVALID_REFERENCE.

O documento ​

O ficheiro fica arquivado com o lançamento. Do nome enviado só se aproveita a extensão: o arquivo dá-lhe um nome próprio. Sem extensão, é tratado como PDF.

Erros ​

EstadoCódigoQuando
400INVALID_BODYCorpo inválido, ou o ficheiro não é base64 válido
400MISSING_FIELDFalta um campo obrigatório, incluindo a rubrica numa conta que a exige. O Field diz qual, por exemplo lines[0].idCategory
400INVALID_REFERENCEO PaymentMode não é um dos três, a conta não é de despesa, a rubrica não pertence à conta da linha, ou a conta de pagamento não serve o condomínio nesse modo
400INVALID_AMOUNTUma linha tem valor igual ou inferior a zero
401 · 403Ver Autenticação e Permissões
404BUILDING_NOT_FOUNDO condomínio não existe
409IDEMPOTENCY_KEY_REUSEDA chave já foi usada noutro pedido
422BANK_ACCOUNT_NOT_DEFINEDO condomínio não tem conta bancária aberta, e o modo é transfer ou check
422EXERCISE_CLOSEDA contabilidade do condomínio está fechada no mês da DocumentDate
422EXPENSE_NOT_CREATEDNão chegou a ser registada. Reporte

Nos erros de uma linha, o Field indica a posição, a contar de zero: lines[1].idAccount é a conta da segunda linha.

A despesa é registada por inteiro ou não é registada: se uma linha falhar, nenhuma fica lançada.

O BANK_ACCOUNT_NOT_DEFINED e o EXERCISE_CLOSED dependem do estado do condomínio na aplicação. Repetir o pedido não os resolve.

API de Integração GC