Referência

Documentos

Emitir e consultar facturas, facturas/recibo, pró-formas, orçamentos, notas de crédito, recibos e guias. Um documento emitido nunca se altera nem se apaga: corrige-se com uma nota de crédito.

Emitir e consultar facturas, facturas/recibo, pró-formas, orçamentos, notas de crédito, recibos e guias. Um documento emitido nunca se altera nem se apaga: corrige-se com uma nota de crédito.

OperaçãoO que faz
GET /api/documentosLista os documentos emitidos, do mais recente para o mais antigo.
GET /api/documentos/pendentesAs facturas a crédito de um cliente que ainda têm valor por liquidar, da mais antiga para a mais recente.
GET /api/documentos/{id}Um documento emitido, com as linhas, os pagamentos e (nos recibos) as liquidações.
GET /api/documentos/{id}/impressaoO modelo de impressão do documento: os dados da empresa e do cliente, as linhas, o resumo de impostos e as frases legais, prontos a desenhar.
GET /api/documentos/{id}/pdfO PDF A4 do documento, igual ao que a aplicação imprime.
GET /api/documentos/{id}/enviosO histórico de envios do documento por e-mail: para quem, quando e com que resultado.
POST /api/documentosEmite um documento: factura, factura/recibo, pró-forma, orçamento ou guia.
POST /api/documentos/pre-calculoCalcula, sem emitir nada, o total que a emissão deste mesmo pedido cobraria.
POST /api/documentos/notas-creditoEmite uma nota de crédito sobre uma factura ou factura/recibo: devolução ou correcção, total ou parcial.
POST /api/documentos/recibosEmite um recibo: o cliente liquida, total ou parcialmente, uma ou várias facturas a crédito de uma só vez.
POST /api/documentos/{id}/enviar-emailEnvia o documento por e-mail ao destinatário indicado.
POST /api/documentos/rascunhosGuarda um rascunho de documento.
PUT /api/documentos/rascunhos/{id}Actualiza um rascunho de documento.
GET /api/documentos/rascunhosLista os rascunhos de documento.
GET /api/documentos/rascunhos/{id}Um rascunho de documento, com as linhas.
DELETE /api/documentos/rascunhos/{id}Elimina um rascunho.
POST /api/documentos/rascunhos/{id}/emitirEmite o documento que o rascunho descreve: passa a ter número e assinatura.
POST /api/documentos/recibos/{id}/anularAnula um recibo, com o motivo.
POST /api/documentos/{id}/enviar-lembrete-pagamentoEnvia ao cliente, por e-mail, um lembrete de pagamento de uma factura a crédito por receber.
POST /api/documentos/{id}/impressoesRegista que o documento vai ser impresso e diz se é o «Original» ou uma reimpressão («2.ª via, em conformidade com a original»).
GET/api/documentos#

Lista os documentos emitidos, do mais recente para o mais antigo.

  • Permissão DocumentosEmitidos.Ler

Filtre por tipoDocumentoId, clienteId, lojaId e por intervalo: dataInicio e dataFim são instantes ISO 8601 com fuso (por exemplo 2026-10-01T00:00:00+01:00), ambos inclusivos. Para um dia inteiro, dataFim tem de ser o fim desse dia.

Cada linha traz o chaveApiId da chave que a emitiu (vazio nos documentos emitidos por uma pessoa). É a forma de reconhecer os seus documentos.

A resposta é uma página: itens e proximoCursor. Ver Paginação.

Parâmetros

NomeOndeTipoObrigatório
tipoDocumentoIdna pesquisaidentificador (UUID)
clienteIdna pesquisaidentificador (UUID)
lojaIdna pesquisaidentificador (UUID)
dataIniciona pesquisadata e hora (ISO 8601)
dataFimna pesquisadata e hora (ISO 8601)
cursorna pesquisatexto
tamanhona pesquisanúmero inteiro

Resposta (200 · JSON)

CampoTipoSignificado
itenslista de objectosOs registos desta página.
itens[].ididentificador (UUID)Identificador único (UUID).
itens[].tipoDocumentoIdidentificador (UUID)O tipo do documento (ver /api/documentos/tipos).
itens[].numerotextoO número legível, atribuído pelo servidor («FR LC2026/25»).
itens[].datadata e hora (ISO 8601)A data e hora (UTC).
itens[].clienteIdidentificador (UUID)O cliente do documento.
itens[].clienteNometexto ou nuloO nome do cliente tal como estava na emissão.
itens[].caixaIdidentificador (UUID) ou nuloA sessão de caixa que recebeu o documento; vazio nos emitidos por chave de API.
itens[].armazemIdidentificador (UUID) ou nuloO armazém de onde saiu (ou para onde voltou) o stock.
itens[].referenciaExternaIdidentificador (UUID) ou nuloO documento de referência: a factura que uma nota de crédito corrige, ou a guia ou cotação que uma factura cumpre.
itens[].estadotextoO estado actual.
itens[].motivoAnulacaotexto ou nuloO motivo, quando o documento foi anulado.
itens[].observacaotexto ou nuloO texto livre.
itens[].hashtexto ou nuloA assinatura digital do documento (em Base64).
itens[].hashControlotexto ou nuloOs 4 caracteres da assinatura que se imprimem no documento.
itens[].versaoChavePrivadatexto ou nuloA versão da chave de assinatura usada.
itens[].dataHoraAssinaturadata e hora (ISO 8601) ou nuloQuando o documento foi assinado (UTC).
itens[].subtotalnúmeroA soma das linhas, já com desconto e sem imposto.
itens[].valorImpostonúmeroO IVA.
itens[].totalValorRetencaonúmeroA retenção na fonte, que se subtrai ao total.
itens[].valorLiquidadonúmeroO que já foi liquidado por recibos.
itens[].valorCreditadonúmeroO que já foi creditado por notas de crédito.
itens[].vendedorOriginadorIdidentificador (UUID) ou nulo
itens[].vendedorFaturadorIdidentificador (UUID) ou nulo
itens[].outrosEncargosnúmeroEncargos somados ao total, sem imposto (portes, taxas).
itens[].referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
itens[].montantePagonúmeroO que foi pago no acto.
itens[].totalDescontonúmeroO total dos descontos.
itens[].operadorNometexto ou nuloQuem emitiu (vazio nos emitidos por chave de API).
itens[].dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).
itens[].registadoOfflineEmUtcdata e hora (ISO 8601) ou nuloQuando a venda foi feita sem rede, se foi (só no ponto de venda).
itens[].chaveApiIdidentificador (UUID) ou nuloA chave de API que emitiu o documento; vazio nos emitidos por uma pessoa.
itens[].importadoOfflineOperadortexto ou nulo
itens[].importadoOfflineDispositivotexto ou nulo
itens[].importadoOfflinePorNometexto ou nulo
itens[].totalGeralnúmeroO total do documento: subtotal + imposto − retenção + outros encargos.
itens[].totalRecebidonúmeroO total recebido (num recibo).
itens[].totalDocumentonúmeroO total do documento.
itens[].valorPendentenúmeroO que ainda falta liquidar.
itens[].totalGeralPorExtensotexto ou nuloO total por extenso, em português.
itens[].itenslista de objectos
itens[].itens[].ididentificador (UUID)Identificador único (UUID).
itens[].itens[].produtoIdidentificador (UUID)O artigo.
itens[].itens[].loteIdidentificador (UUID) ou nuloO lote, quando o artigo controla validade.
itens[].itens[].descricaotextoA descrição.
itens[].itens[].precoUnitarionúmeroO preço de uma unidade, sem imposto.
itens[].itens[].quantidadenúmeroA quantidade.
itens[].itens[].descontoPercentualnúmeroO desconto da linha, em percentagem (0 a 99).
itens[].itens[].descontoFinanceiroPercentualnúmeroO desconto financeiro do documento aplicado a esta linha, em percentagem.
itens[].itens[].impostoPercentualnúmeroA taxa de IVA aplicada, em percentagem.
itens[].itens[].taxaRetencaoPercentualnúmeroA taxa de retenção aplicada, em percentagem.
itens[].itens[].referenciaItemOrigemIdidentificador (UUID) ou nulo
itens[].itens[].creditadaEmDocumentoIdidentificador (UUID) ou nulo
itens[].itens[].motivoAnulacaoItemtexto ou nulo
itens[].itens[].descontoPromocaonúmero
itens[].itens[].promocaoIdidentificador (UUID) ou nulo
itens[].itens[].promocaoNometexto ou nulo
itens[].itens[].ofertaverdadeiro/falso
itens[].itens[].precoTotalnúmeroPreço × quantidade, antes do desconto.
itens[].itens[].valorDescontonúmeroO valor do desconto.
itens[].itens[].subtotalnúmeroA soma das linhas, já com desconto e sem imposto.
itens[].itens[].valorImpostonúmeroO IVA.
itens[].itens[].totalValorRetencaonúmeroA retenção na fonte, que se subtrai ao total.
itens[].itens[].valorPagarnúmeroO total da linha: subtotal + imposto − retenção.
itens[].pagamentoslista de objectos
itens[].pagamentos[].ididentificador (UUID)Identificador único (UUID).
itens[].pagamentos[].metodoPagamentoIdidentificador (UUID)O método de pagamento.
itens[].pagamentos[].valornúmeroO valor.
itens[].pagamentos[].tipoLancamentotextoCredito (dinheiro a entrar) ou Debito.
itens[].pagamentos[].datadata e hora (ISO 8601)A data e hora (UTC).
itens[].pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
itens[].pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
itens[].pagamentos[].metodoDescricaotexto ou nuloO nome do método de pagamento.
itens[].liquidacoeslista de objectos
itens[].liquidacoes[].ididentificador (UUID)Identificador único (UUID).
itens[].liquidacoes[].documentoLiquidadoIdidentificador (UUID)
itens[].liquidacoes[].numeroDocumentoLiquidadotexto
itens[].liquidacoes[].valornúmeroO valor.
itens[].liquidacoes[].dataDocumentoLiquidadodata e hora (ISO 8601)
itens[].liquidacoes[].totalDocumentoLiquidadonúmero
itens[].liquidacoes[].totalRetencaoDocumentoLiquidadonúmero
itens[].liquidacoes[].totalImpostoDocumentoLiquidadonúmero
itens[].liquidacoes[].totalPagoAposEstanúmero
itens[].liquidacoes[].totalEmFaltaAposEstanúmero
itens[].pagamentosRecebidoslista de objectos
itens[].pagamentosRecebidos[].documentoIdidentificador (UUID)
itens[].pagamentosRecebidos[].documentoNumerotexto
itens[].pagamentosRecebidos[].datadata e hora (ISO 8601)A data e hora (UTC).
itens[].pagamentosRecebidos[].valornúmeroO valor.
itens[].pagamentosRecebidos[].metodotexto
itens[].pagamentosRecebidos[].operadortexto ou nulo
itens[].pagamentosRecebidos[].observacaotexto ou nuloO texto livre.
proximoCursortexto ou nuloO cursor da página seguinte; nulo quando não há mais. Ver Paginação.

Pedido

curl
curl 'https://<endereço-da-API>/api/documentos' \
  -H 'X-Api-Key: <a-sua-chave>'
GET/api/documentos/pendentes#

As facturas a crédito de um cliente que ainda têm valor por liquidar, da mais antiga para a mais recente.

  • Permissão DocumentosEmitidos.Ler

É a lista a partir da qual se emite um Recibo. Um Recibo tem de liquidar as mais antigas primeiro.

Parâmetros

NomeOndeTipoObrigatório
clienteIdna pesquisaidentificador (UUID)sim

Resposta (200 · JSON)

CampoTipoSignificado
[].ididentificador (UUID)Identificador único (UUID).
[].numerotextoO número legível, atribuído pelo servidor («FR LC2026/25»).
[].datadata e hora (ISO 8601)A data e hora (UTC).
[].tipoDocumentoIdidentificador (UUID)O tipo do documento (ver /api/documentos/tipos).
[].siglaDocumentotextoA sigla do tipo («FT», «FR», «NC»…).
[].totalGeralnúmeroO total do documento: subtotal + imposto − retenção + outros encargos.
[].valorLiquidadonúmeroO que já foi liquidado por recibos.
[].valorCreditadonúmeroO que já foi creditado por notas de crédito.
[].valorPendentenúmeroO que ainda falta liquidar.

Exemplo

As facturas por liquidar de um cliente

Pedido
curl 'https://<endereço-da-API>/api/documentos/pendentes?clienteId=01a12201-fa0a-7aac-93c4-f2d42f3c31cd' \
  -H 'X-Api-Key: assw_v1_<chave>'
Pedido
const resposta = await fetch('https://<endereço-da-API>/api/documentos/pendentes?clienteId=01a12201-fa0a-7aac-93c4-f2d42f3c31cd', {
  method: 'GET',
  headers: {
    "X-Api-Key": "assw_v1_<chave>"
  },
})
const dados = await resposta.json()
Pedido
import requests

resposta = requests.get(
    'https://<endereço-da-API>/api/documentos/pendentes?clienteId=01a12201-fa0a-7aac-93c4-f2d42f3c31cd',
    headers={
        'X-Api-Key': 'assw_v1_<chave>'
    },
)
dados = resposta.json()
Pedido
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Get, "/api/documentos/pendentes?clienteId=01a12201-fa0a-7aac-93c4-f2d42f3c31cd");
pedido.Headers.Add("X-Api-Key", "assw_v1_<chave>");
using var resposta = await cliente.SendAsync(pedido);
var texto = await resposta.Content.ReadAsStringAsync();

200 OK Resposta

Resposta
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1

[
  {
    "id": "01a12f22-0dd0-7906-98a2-607105acccc1",
    "numero": "FT LC2026/9",
    "data": "2026-10-12T08:02:04.430629Z",
    "tipoDocumentoId": "2a6a1e94-6e0d-4b8e-9f42-8f6a2f0c7b41",
    "siglaDocumento": "FT",
    "totalGeral": 2850,
    "valorLiquidado": 0,
    "valorCreditado": 0,
    "valorPendente": 2850
  },
  {
    "id": "01a12f68-fb42-7bb7-b7e7-e451a26e5d66",
    "numero": "FT LC2026/10",
    "data": "2026-10-12T09:19:31.690877Z",
    "tipoDocumentoId": "2a6a1e94-6e0d-4b8e-9f42-8f6a2f0c7b41",
    "siglaDocumento": "FT",
    "totalGeral": 7410,
    "valorLiquidado": 0,
    "valorCreditado": 0,
    "valorPendente": 7410
  },
  {
    "id": "01a12f69-873b-73f9-8fb4-120df044e6a5",
    "numero": "FT LC2026/11",
    "data": "2026-10-12T09:20:07.506771Z",
    "tipoDocumentoId": "2a6a1e94-6e0d-4b8e-9f42-8f6a2f0c7b41",
    "siglaDocumento": "FT",
    "totalGeral": 7410,
    "valorLiquidado": 0,
    "valorCreditado": 0,
    "valorPendente": 7410
  },
  {
    "id": "01a12f69-9b31-7bbb-9089-d3f4b0f4f194",
    "numero": "FT LC2026/12",
    "data": "2026-10-12T09:20:12.613133Z",
    "tipoDocumentoId": "2a6a1e94-6e0d-4b8e-9f42-8f6a2f0c7b41",
    "siglaDocumento": "FT",
    "totalGeral": 7410,
    "valorLiquidado": 0,
    "valorCreditado": 0,
    "valorPendente": 7410
  }
]
GET/api/documentos/{id}#

Um documento emitido, com as linhas, os pagamentos e (nos recibos) as liquidações.

  • Permissão Documentos.Ler

hash e hashControlo são a assinatura digital do documento; numero é o número legível («FR LC2026/25»).

Os totais (subtotal, valorImposto, totalGeral…) são calculados a partir das linhas.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Resposta (200 · JSON)

CampoTipoSignificado
ididentificador (UUID)Identificador único (UUID).
tipoDocumentoIdidentificador (UUID)O tipo do documento (ver /api/documentos/tipos).
numerotextoO número legível, atribuído pelo servidor («FR LC2026/25»).
datadata e hora (ISO 8601)A data e hora (UTC).
clienteIdidentificador (UUID)O cliente do documento.
clienteNometexto ou nuloO nome do cliente tal como estava na emissão.
caixaIdidentificador (UUID) ou nuloA sessão de caixa que recebeu o documento; vazio nos emitidos por chave de API.
armazemIdidentificador (UUID) ou nuloO armazém de onde saiu (ou para onde voltou) o stock.
referenciaExternaIdidentificador (UUID) ou nuloO documento de referência: a factura que uma nota de crédito corrige, ou a guia ou cotação que uma factura cumpre.
estadotextoO estado actual.
motivoAnulacaotexto ou nuloO motivo, quando o documento foi anulado.
observacaotexto ou nuloO texto livre.
hashtexto ou nuloA assinatura digital do documento (em Base64).
hashControlotexto ou nuloOs 4 caracteres da assinatura que se imprimem no documento.
versaoChavePrivadatexto ou nuloA versão da chave de assinatura usada.
dataHoraAssinaturadata e hora (ISO 8601) ou nuloQuando o documento foi assinado (UTC).
subtotalnúmeroA soma das linhas, já com desconto e sem imposto.
valorImpostonúmeroO IVA.
totalValorRetencaonúmeroA retenção na fonte, que se subtrai ao total.
valorLiquidadonúmeroO que já foi liquidado por recibos.
valorCreditadonúmeroO que já foi creditado por notas de crédito.
vendedorOriginadorIdidentificador (UUID) ou nulo
vendedorFaturadorIdidentificador (UUID) ou nulo
outrosEncargosnúmeroEncargos somados ao total, sem imposto (portes, taxas).
referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
montantePagonúmeroO que foi pago no acto.
totalDescontonúmeroO total dos descontos.
operadorNometexto ou nuloQuem emitiu (vazio nos emitidos por chave de API).
dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).
registadoOfflineEmUtcdata e hora (ISO 8601) ou nuloQuando a venda foi feita sem rede, se foi (só no ponto de venda).
chaveApiIdidentificador (UUID) ou nuloA chave de API que emitiu o documento; vazio nos emitidos por uma pessoa.
importadoOfflineOperadortexto ou nulo
importadoOfflineDispositivotexto ou nulo
importadoOfflinePorNometexto ou nulo
totalGeralnúmeroO total do documento: subtotal + imposto − retenção + outros encargos.
totalRecebidonúmeroO total recebido (num recibo).
totalDocumentonúmeroO total do documento.
valorPendentenúmeroO que ainda falta liquidar.
totalGeralPorExtensotexto ou nuloO total por extenso, em português.
itenslista de objectos
itens[].ididentificador (UUID)Identificador único (UUID).
itens[].produtoIdidentificador (UUID)O artigo.
itens[].loteIdidentificador (UUID) ou nuloO lote, quando o artigo controla validade.
itens[].descricaotextoA descrição.
itens[].precoUnitarionúmeroO preço de uma unidade, sem imposto.
itens[].quantidadenúmeroA quantidade.
itens[].descontoPercentualnúmeroO desconto da linha, em percentagem (0 a 99).
itens[].descontoFinanceiroPercentualnúmeroO desconto financeiro do documento aplicado a esta linha, em percentagem.
itens[].impostoPercentualnúmeroA taxa de IVA aplicada, em percentagem.
itens[].taxaRetencaoPercentualnúmeroA taxa de retenção aplicada, em percentagem.
itens[].referenciaItemOrigemIdidentificador (UUID) ou nulo
itens[].creditadaEmDocumentoIdidentificador (UUID) ou nulo
itens[].motivoAnulacaoItemtexto ou nulo
itens[].descontoPromocaonúmero
itens[].promocaoIdidentificador (UUID) ou nulo
itens[].promocaoNometexto ou nulo
itens[].ofertaverdadeiro/falso
itens[].precoTotalnúmeroPreço × quantidade, antes do desconto.
itens[].valorDescontonúmeroO valor do desconto.
itens[].subtotalnúmeroA soma das linhas, já com desconto e sem imposto.
itens[].valorImpostonúmeroO IVA.
itens[].totalValorRetencaonúmeroA retenção na fonte, que se subtrai ao total.
itens[].valorPagarnúmeroO total da linha: subtotal + imposto − retenção.
pagamentoslista de objectos
pagamentos[].ididentificador (UUID)Identificador único (UUID).
pagamentos[].metodoPagamentoIdidentificador (UUID)O método de pagamento.
pagamentos[].valornúmeroO valor.
pagamentos[].tipoLancamentotextoCredito (dinheiro a entrar) ou Debito.
pagamentos[].datadata e hora (ISO 8601)A data e hora (UTC).
pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
pagamentos[].metodoDescricaotexto ou nuloO nome do método de pagamento.
liquidacoeslista de objectos
liquidacoes[].ididentificador (UUID)Identificador único (UUID).
liquidacoes[].documentoLiquidadoIdidentificador (UUID)
liquidacoes[].numeroDocumentoLiquidadotexto
liquidacoes[].valornúmeroO valor.
liquidacoes[].dataDocumentoLiquidadodata e hora (ISO 8601)
liquidacoes[].totalDocumentoLiquidadonúmero
liquidacoes[].totalRetencaoDocumentoLiquidadonúmero
liquidacoes[].totalImpostoDocumentoLiquidadonúmero
liquidacoes[].totalPagoAposEstanúmero
liquidacoes[].totalEmFaltaAposEstanúmero
pagamentosRecebidoslista de objectos
pagamentosRecebidos[].documentoIdidentificador (UUID)
pagamentosRecebidos[].documentoNumerotexto
pagamentosRecebidos[].datadata e hora (ISO 8601)A data e hora (UTC).
pagamentosRecebidos[].valornúmeroO valor.
pagamentosRecebidos[].metodotexto
pagamentosRecebidos[].operadortexto ou nulo
pagamentosRecebidos[].observacaotexto ou nuloO texto livre.

Erros específicos

NAO_ENCONTRADO — além dos gerais.

Exemplo

Consultar o documento emitido

Pedido
curl 'https://<endereço-da-API>/api/documentos/01a12f69-9a59-714a-9d67-10d65ba202cf' \
  -H 'X-Api-Key: assw_v1_<chave>'
Pedido
const resposta = await fetch('https://<endereço-da-API>/api/documentos/01a12f69-9a59-714a-9d67-10d65ba202cf', {
  method: 'GET',
  headers: {
    "X-Api-Key": "assw_v1_<chave>"
  },
})
const dados = await resposta.json()
Pedido
import requests

resposta = requests.get(
    'https://<endereço-da-API>/api/documentos/01a12f69-9a59-714a-9d67-10d65ba202cf',
    headers={
        'X-Api-Key': 'assw_v1_<chave>'
    },
)
dados = resposta.json()
Pedido
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Get, "/api/documentos/01a12f69-9a59-714a-9d67-10d65ba202cf");
pedido.Headers.Add("X-Api-Key", "assw_v1_<chave>");
using var resposta = await cliente.SendAsync(pedido);
var texto = await resposta.Content.ReadAsStringAsync();

200 OK Resposta

Resposta
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1

{
  "id": "01a12f69-9a59-714a-9d67-10d65ba202cf",
  "tipoDocumentoId": "6d3f9c9b-6d0a-4e4d-9a9a-2c9f8b1e4d52",
  "numero": "FR LC2026/29",
  "data": "2026-10-12T09:20:12.399987Z",
  "clienteId": "01a12f69-98f8-7688-85b9-8d829c101c8b",
  "clienteNome": "Mercearia Cazenga Nova",
  "caixaId": null,
  "armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
  "referenciaExternaId": null,
  "estado": "Novo",
  "motivoAnulacao": null,
  "observacao": "Pedido #4821 da loja online",
  "hash": "a17i27DU2J53A1VG+U4XkfLa8muGqAxJaKe1TxIb9CmC06j9AipBsYPafR0N/1ifG7G9tPy/ScVnEVpENAp3D+2a2lOcL7z3VGd++57xznZRepA+uJMEjEy9NIpFMK1VWHXmca/4FVTzG2leahl18S/mgKYN50LKdRz1gK39oCA=",
  "hashControlo": "a5kx",
  "versaoChavePrivada": "1",
  "dataHoraAssinatura": "2026-10-12T09:20:12.410197Z",
  "subtotal": 13000,
  "valorImposto": 1820,
  "totalValorRetencao": 0,
  "valorLiquidado": 0,
  "valorCreditado": 0,
  "vendedorOriginadorId": null,
  "vendedorFaturadorId": null,
  "outrosEncargos": 0,
  "referenciaCliente": null,
  "montantePago": 14820,
  "totalDesconto": 0,
  "operadorNome": null,
  "dataVencimento": null,
  "registadoOfflineEmUtc": null,
  "chaveApiId": "01a12f69-9867-79c2-ad0c-811c6899737a",
  "totalGeral": 14820,
  "totalRecebido": 14820,
  "totalDocumento": 14820,
  "valorPendente": 0,
  "totalGeralPorExtenso": "catorze mil oitocentos e vinte kwanzas",
  "itens": [
    {
      "id": "01a12f69-9a75-71ff-8c4f-163cce92fd02",
      "produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
      "loteId": null,
      "descricao": "Arroz agulha 5 kg",
      "precoUnitario": 6500,
      "quantidade": 2,
      "descontoPercentual": 0,
      "descontoFinanceiroPercentual": 0,
      "impostoPercentual": 14,
      "taxaRetencaoPercentual": 0,
      "referenciaItemOrigemId": null,
      "creditadaEmDocumentoId": null,
      "motivoAnulacaoItem": null,
      "descontoPromocao": 0,
      "promocaoId": null,
      "promocaoNome": null,
      "oferta": false,
      "precoTotal": 13000,
      "valorDesconto": 0,
      "subtotal": 13000,
      "valorImposto": 1820,
  …
GET/api/documentos/{id}/impressao#

O modelo de impressão do documento: os dados da empresa e do cliente, as linhas, o resumo de impostos e as frases legais, prontos a desenhar.

  • Permissão Documentos.Ler

É o que um programa de impressão ou uma aplicação usa para desenhar o documento à sua maneira. Para o PDF já desenhado, use /pdf.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Resposta (200 · JSON)

CampoTipoSignificado
empresaobjecto
empresa.nometextoO nome.
empresa.numeroContribuintetexto ou nuloO número de contribuinte (NIF).
empresa.enderecotexto ou nuloA morada.
empresa.telefonetexto ou nuloO telefone.
empresa.emailtextoO endereço de e-mail.
empresa.websitetexto ou nulo
empresa.temLogotipoverdadeiro/falso
empresa.informacaoFacturatexto ou nulo
empresa.contasBancariaslista de objectos
empresa.contasBancarias[].bancotexto
empresa.contasBancarias[].numeroContatexto ou nulo
empresa.contasBancarias[].ibantexto ou nulo
empresa.numeroCertificadoAgttexto ou nulo
clienteobjecto
cliente.ididentificador (UUID)Identificador único (UUID).
cliente.nometextoO nome.
cliente.numeroContribuintetexto ou nuloO número de contribuinte (NIF).
cliente.enderecotextoA morada.
cliente.telefonetexto ou nuloO telefone.
cliente.emailtexto ou nuloO endereço de e-mail.
cliente.isConsumidorFinalverdadeiro/falsoVerdadeiro no cliente sem identificação fiscal.
tipoDescricaotexto
siglaDocumentotextoA sigla do tipo («FT», «FR», «NC»…).
numerotextoO número legível, atribuído pelo servidor («FR LC2026/25»).
datadata e hora (ISO 8601)A data e hora (UTC).
estadotextoO estado actual.
motivoAnulacaotexto ou nuloO motivo, quando o documento foi anulado.
observacaotexto ou nuloO texto livre.
numeroDocumentoReferenciatexto ou nulo
referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
itenslista de objectos
itens[].codigoInternotexto ou nuloO código interno do artigo.
itens[].descricaotextoA descrição.
itens[].unidadetexto ou nulo
itens[].lotetexto ou nulo
itens[].quantidadenúmeroA quantidade.
itens[].precoUnitarionúmeroO preço de uma unidade, sem imposto.
itens[].descontoPercentualnúmeroO desconto da linha, em percentagem (0 a 99).
itens[].valorDescontonúmeroO valor do desconto.
itens[].subtotalnúmeroA soma das linhas, já com desconto e sem imposto.
itens[].impostoPercentualnúmeroA taxa de IVA aplicada, em percentagem.
itens[].valorImpostonúmeroO IVA.
itens[].taxaRetencaoPercentualnúmeroA taxa de retenção aplicada, em percentagem.
itens[].valorRetencaonúmero
itens[].valorPagarnúmeroO total da linha: subtotal + imposto − retenção.
itens[].motivoIsencaotexto ou nulo
itens[].codigoIsencaotexto ou nulo
itens[].unidadeVendidatexto ou nulo
itens[].promocaoNometexto ou nulo
itens[].descontoPromocaonúmero
itens[].ofertaverdadeiro/falso
resumoImpostoslista de objectos
resumoImpostos[].taxanúmeroA taxa, em percentagem.
resumoImpostos[].incidencianúmero
resumoImpostos[].impostonúmero
resumoImpostos[].motivoIsencaotexto ou nulo
totalDescontonúmeroO total dos descontos.
subtotalnúmeroA soma das linhas, já com desconto e sem imposto.
totalImpostonúmero
totalRetencaonúmero
totalGeralnúmeroO total do documento: subtotal + imposto − retenção + outros encargos.
totalPorExtensotexto
pagamentoslista de objectos
pagamentos[].metodotexto
pagamentos[].valornúmeroO valor.
pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
liquidacoeslista de objectos
liquidacoes[].ididentificador (UUID)Identificador único (UUID).
liquidacoes[].documentoLiquidadoIdidentificador (UUID)
liquidacoes[].numeroDocumentoLiquidadotexto
liquidacoes[].valornúmeroO valor.
liquidacoes[].dataDocumentoLiquidadodata e hora (ISO 8601)
liquidacoes[].totalDocumentoLiquidadonúmero
liquidacoes[].totalRetencaoDocumentoLiquidadonúmero
liquidacoes[].totalImpostoDocumentoLiquidadonúmero
liquidacoes[].totalPagoAposEstanúmero
liquidacoes[].totalEmFaltaAposEstanúmero
montantePagonúmeroO que foi pago no acto.
hashtexto ou nuloA assinatura digital do documento (em Base64).
hashControlotexto ou nuloOs 4 caracteres da assinatura que se imprimem no documento.
linhaAssinaturatexto ou nulo
naoServeDeFacturaverdadeiro/falso
ehReciboverdadeiro/falso
empresaGestoraverdadeiro/falso
rodapeDaMarcaobjecto ou nulo
rodapeDaMarca.titulotexto
rodapeDaMarca.mensagemtexto
rodapeDaMarca.sitetexto
rodapeDaMarca.emailtextoO endereço de e-mail.
rodapeDaMarca.telefonetextoO telefone.
rodapeDaMarca.pilareslista de texto
rodapeDaMarca.comLogotipoverdadeiro/falso
mostraRodapeDoPlanoverdadeiro/falso
dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).
transporteobjecto ou nulo
transporte.inicioTransportedata e hora (ISO 8601)
transporte.fimTransportedata e hora (ISO 8601) ou nulo
transporte.matriculatexto ou nulo
transporte.origemobjecto
transporte.origem.detalhetexto
transporte.origem.cidadetexto
transporte.origem.codigoPostaltexto ou nulo
transporte.origem.paistexto
transporte.destinoobjecto
transporte.destino.detalhetexto
transporte.destino.cidadetexto
transporte.destino.codigoPostaltexto ou nulo
transporte.destino.paistexto
qrCodeobjecto ou nulo
qrCode.urltexto
qrCode.versaonúmero inteiro
qrCode.ladonúmero inteiro
qrCode.moduloslista de texto
documentoIdidentificador (UUID)
localDaOperacaotexto ou nulo
naturezaDaCorreccaotexto ou nulo

Pedido

curl
curl 'https://<endereço-da-API>/api/documentos/<id>/impressao' \
  -H 'X-Api-Key: <a-sua-chave>'
GET/api/documentos/{id}/pdf#

O PDF A4 do documento, igual ao que a aplicação imprime.

  • Permissão Documentos.Ler

vias (1 a 4) repete o documento em várias vias, com a marcação de cada uma («Original», «Duplicado»…). Conta como um pedido pesado.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim
viasna pesquisanúmero inteiro

Resposta

Devolve 200 com o ficheiro (application/pdf) e Content-Disposition com o nome do ficheiro.

Pedido

curl
curl 'https://<endereço-da-API>/api/documentos/<id>/pdf' \
  -H 'X-Api-Key: <a-sua-chave>'
GET/api/documentos/{id}/envios#

O histórico de envios do documento por e-mail: para quem, quando e com que resultado.

  • Permissão Documentos.Ler

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Resposta (200 · JSON)

CampoTipoSignificado
[].ididentificador (UUID)Identificador único (UUID).
[].destinatariotexto
[].origemtexto
[].tipotexto
[].estadotextoO estado actual.
[].tentativasnúmero inteiro
[].ultimoErrotexto ou nulo
[].criadoEmUtcdata e hora (ISO 8601)Quando o evento aconteceu (UTC).
[].proximaTentativaEmUtcdata e hora (ISO 8601) ou nulo
[].enviadoEmUtcdata e hora (ISO 8601) ou nulo
[].solicitadoPortexto ou nulo

Pedido

curl
curl 'https://<endereço-da-API>/api/documentos/<id>/envios' \
  -H 'X-Api-Key: <a-sua-chave>'
POST/api/documentos#

Emite um documento: factura, factura/recibo, pró-forma, orçamento ou guia.

  • Permissão Documentos.Emitir
  • Idempotência aceita Idempotency-Key

Sempre com Idempotency-Key. Uma emissão é fiscal: se a rede falhar antes da resposta, repetir sem a chave poderia emitir dois documentos.

O imposto e a retenção nunca se enviam: o servidor deriva-os do artigo e do cliente. Envia-se o preço, a quantidade e o desconto.

pagamentos tem de somar exactamente o total do documento numa factura/recibo, e fica vazio numa factura a crédito, numa pró-forma ou num orçamento. Para saber esse total ao cêntimo, peça-o antes a POST /api/documentos/pre-calculo.

armazemId é obrigatório quando o documento movimenta stock; lojaId quando a empresa tem mais do que um estabelecimento.

A emissão é tudo ou nada: se faltar stock numa linha, nada é emitido e nenhum número é consumido.

Um documento emitido por uma chave não passa por uma sessão de caixa: o dinheiro entra directamente na conta financeira do método de pagamento e o documento fica com o chaveApiId.

Para guias (GR, GT, GD) envie transporte com a origem, o destino, a matrícula e o início do transporte.

Corpo do pedido (JSON · CreateDocumentoCommand)

CampoTipoObrigatórioSignificado
tipoDocumentoIdidentificador (UUID)simO tipo do documento (ver /api/documentos/tipos).
clienteIdidentificador (UUID) ou nuloO cliente do documento.
armazemIdidentificador (UUID) ou nuloO armazém de onde saiu (ou para onde voltou) o stock.
referenciaExternaIdidentificador (UUID) ou nuloO documento de referência: a factura que uma nota de crédito corrige, ou a guia ou cotação que uma factura cumpre.
observacaotexto ou nuloO texto livre.
itenslista de objectossim
itens[].produtoIdidentificador (UUID)simO artigo.
itens[].quantidadenúmerosimA quantidade.
itens[].precoUnitarionúmerosimO preço de uma unidade, sem imposto.
itens[].descontoPercentualnúmerosimO desconto da linha, em percentagem (0 a 99).
itens[].descricaotexto ou nuloA descrição.
itens[].unidadeVendaIdidentificador (UUID) ou nulo
pagamentoslista de objectossim
pagamentos[].metodoPagamentoIdidentificador (UUID)simO método de pagamento.
pagamentos[].valornúmerosimO valor.
pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
transporteobjecto ou nulo
transporte.inicioTransportedata e hora (ISO 8601)sim
transporte.fimTransportedata e hora (ISO 8601) ou nulo
transporte.matriculatexto ou nulo
transporte.origemobjectosim
transporte.origem.detalhetextosim
transporte.origem.cidadetextosim
transporte.origem.codigoPostaltexto ou nulo
transporte.origem.paistexto
transporte.destinoobjectosim
transporte.destino.detalhetextosim
transporte.destino.cidadetextosim
transporte.destino.codigoPostaltexto ou nulo
transporte.destino.paistexto
lojaIdidentificador (UUID) ou nuloO estabelecimento.
vendedorOriginadorIdidentificador (UUID) ou nulo
vendedorFaturadorIdidentificador (UUID) ou nulo
descontoFinanceiroPercentualnúmeroO desconto financeiro do documento aplicado a esta linha, em percentagem.
outrosEncargosnúmeroEncargos somados ao total, sem imposto (portes, taxas).
referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).
cumpreReservaLinhaIdslista de identificador (UUID) ou nulo
autorizacaoSupervisorIdidentificador (UUID) ou nulo
aplicarPromocoesverdadeiro/falso
promocoesPermitidaslista de identificador (UUID) ou nulo
nomeClienteAvulsotexto ou nulo

Resposta

Devolve 201 com { "id": "…" } e o cabeçalho Location. Um pedido repetido com a mesma Idempotency-Key devolve o mesmo id, com o cabeçalho Idempotency-Replayed: true.

Erros específicos

STOCK_INSUFICIENTE · PAGAMENTO_NAO_COBRE_TOTAL · ESTABELECIMENTO_OBRIGATORIO · ARMAZEM_OBRIGATORIO · LIMITE_CREDITO_EXCEDIDO · CLIENTE_SEM_CONTA_CORRENTE · METODO_PAGAMENTO_INACTIVO · REFERENCIA_NAO_ENCONTRADA · IDEMPOTENCIA_CONFLITO — além dos gerais.

Exemplo

Emitir uma Factura/Recibo paga em numerário

Pedido
curl -X POST 'https://<endereço-da-API>/api/documentos' \
  -H 'Idempotency-Key: 4756676e-a135-4e46-9ce8-3a5502ea85f0' \
  -H 'X-Api-Key: assw_v1_<chave>' \
  -H 'Content-Type: application/json' \
  -d '{
  "tipoDocumentoId": "6d3f9c9b-6d0a-4e4d-9a9a-2c9f8b1e4d52",
  "clienteId": "01a12f69-98f8-7688-85b9-8d829c101c8b",
  "armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
  "lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
  "observacao": "Pedido #4821 da loja online",
  "itens": [
    {
      "produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
      "quantidade": 2,
      "precoUnitario": 6500,
      "descontoPercentual": 0
    }
  ],
  "pagamentos": [
    {
      "metodoPagamentoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
      "valor": 14820
    }
  ]
}'
Pedido
const resposta = await fetch('https://<endereço-da-API>/api/documentos', {
  method: 'POST',
  headers: {
    "Idempotency-Key": "4756676e-a135-4e46-9ce8-3a5502ea85f0",
    "X-Api-Key": "assw_v1_<chave>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "tipoDocumentoId": "6d3f9c9b-6d0a-4e4d-9a9a-2c9f8b1e4d52",
    "clienteId": "01a12f69-98f8-7688-85b9-8d829c101c8b",
    "armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
    "lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
    "observacao": "Pedido #4821 da loja online",
    "itens": [
      {
        "produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
        "quantidade": 2,
        "precoUnitario": 6500,
        "descontoPercentual": 0
      }
    ],
    "pagamentos": [
      {
        "metodoPagamentoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
        "valor": 14820
      }
    ]
  }),
})
const dados = await resposta.json()
Pedido
import requests

resposta = requests.post(
    'https://<endereço-da-API>/api/documentos',
    headers={
        'Idempotency-Key': '4756676e-a135-4e46-9ce8-3a5502ea85f0',
        'X-Api-Key': 'assw_v1_<chave>',
        'Content-Type': 'application/json'
    },
    json={
        'tipoDocumentoId': '6d3f9c9b-6d0a-4e4d-9a9a-2c9f8b1e4d52',
        'clienteId': '01a12f69-98f8-7688-85b9-8d829c101c8b',
        'armazemId': '01a12201-f4d4-78a0-8dde-1efc41b94776',
        'lojaId': '01a12201-f4d4-7c07-86b7-e5b24035993e',
        'observacao': 'Pedido #4821 da loja online',
        'itens': [
            {
                'produtoId': '01a12201-fa97-7f9b-8eec-2f731b91a53b',
                'quantidade': 2,
                'precoUnitario': 6500,
                'descontoPercentual': 0
            }
        ],
        'pagamentos': [
            {
                'metodoPagamentoId': '9dde532b-0092-4a68-b2dc-18649f0c97c4',
                'valor': 14820
            }
        ]
    },
)
dados = resposta.json()
Pedido
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Post, "/api/documentos");
pedido.Headers.Add("Idempotency-Key", "4756676e-a135-4e46-9ce8-3a5502ea85f0");
pedido.Headers.Add("X-Api-Key", "assw_v1_<chave>");
pedido.Content = new StringContent("""
{
  "tipoDocumentoId": "6d3f9c9b-6d0a-4e4d-9a9a-2c9f8b1e4d52",
  "clienteId": "01a12f69-98f8-7688-85b9-8d829c101c8b",
  "armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
  "lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
  "observacao": "Pedido #4821 da loja online",
  "itens": [
    {
      "produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
      "quantidade": 2,
      "precoUnitario": 6500,
      "descontoPercentual": 0
    }
  ],
  "pagamentos": [
    {
      "metodoPagamentoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
      "valor": 14820
    }
  ]
}
""", Encoding.UTF8, "application/json");
using var resposta = await cliente.SendAsync(pedido);
var texto = await resposta.Content.ReadAsStringAsync();

201 Created Resposta

Resposta
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1
location: /api/documentos/01a12f69-9a59-714a-9d67-10d65ba202cf

{
  "id": "01a12f69-9a59-714a-9d67-10d65ba202cf"
}
POST/api/documentos/pre-calculo#

Calcula, sem emitir nada, o total que a emissão deste mesmo pedido cobraria.

  • Permissão Documentos.Emitir
  • Idempotência aceita Idempotency-Key

Envia-se o mesmo corpo da emissão (POST /api/documentos), sem pagamentos. Nada é emitido, nenhum número é consumido e o stock não se mexe.

Numa factura/recibo, cobre este valor. O IVA arredonda-se linha a linha e uma venda de um artigo com lotes divide-se numa linha por lote consumido: somar o total do seu lado pode dar 1 cêntimo a menos ou a mais, e a emissão seria recusada (PAGAMENTO_NAO_COBRE_TOTAL).

A resposta traz o total (totalGeral), os totais parciais e as linhas tal como a emissão as produziria, uma por lote, com o lote de cada uma.

É um cálculo sobre o stock de agora: se o stock mudar entre este pedido e a emissão, o lote a consumir pode mudar e o total também. Emita logo a seguir e, se a emissão recusar o total, peça-o de novo.

Aceita os mesmos erros de validação da emissão (artigo inexistente, stock insuficiente, estabelecimento em falta).

Corpo do pedido (JSON · CreateDocumentoCommand)

CampoTipoObrigatórioSignificado
tipoDocumentoIdidentificador (UUID)simO tipo do documento (ver /api/documentos/tipos).
clienteIdidentificador (UUID) ou nuloO cliente do documento.
armazemIdidentificador (UUID) ou nuloO armazém de onde saiu (ou para onde voltou) o stock.
referenciaExternaIdidentificador (UUID) ou nuloO documento de referência: a factura que uma nota de crédito corrige, ou a guia ou cotação que uma factura cumpre.
observacaotexto ou nuloO texto livre.
itenslista de objectossim
itens[].produtoIdidentificador (UUID)simO artigo.
itens[].quantidadenúmerosimA quantidade.
itens[].precoUnitarionúmerosimO preço de uma unidade, sem imposto.
itens[].descontoPercentualnúmerosimO desconto da linha, em percentagem (0 a 99).
itens[].descricaotexto ou nuloA descrição.
itens[].unidadeVendaIdidentificador (UUID) ou nulo
pagamentoslista de objectossim
pagamentos[].metodoPagamentoIdidentificador (UUID)simO método de pagamento.
pagamentos[].valornúmerosimO valor.
pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
transporteobjecto ou nulo
transporte.inicioTransportedata e hora (ISO 8601)sim
transporte.fimTransportedata e hora (ISO 8601) ou nulo
transporte.matriculatexto ou nulo
transporte.origemobjectosim
transporte.origem.detalhetextosim
transporte.origem.cidadetextosim
transporte.origem.codigoPostaltexto ou nulo
transporte.origem.paistexto
transporte.destinoobjectosim
transporte.destino.detalhetextosim
transporte.destino.cidadetextosim
transporte.destino.codigoPostaltexto ou nulo
transporte.destino.paistexto
lojaIdidentificador (UUID) ou nuloO estabelecimento.
vendedorOriginadorIdidentificador (UUID) ou nulo
vendedorFaturadorIdidentificador (UUID) ou nulo
descontoFinanceiroPercentualnúmeroO desconto financeiro do documento aplicado a esta linha, em percentagem.
outrosEncargosnúmeroEncargos somados ao total, sem imposto (portes, taxas).
referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).
cumpreReservaLinhaIdslista de identificador (UUID) ou nulo
autorizacaoSupervisorIdidentificador (UUID) ou nulo
aplicarPromocoesverdadeiro/falso
promocoesPermitidaslista de identificador (UUID) ou nulo
nomeClienteAvulsotexto ou nulo

Resposta

Devolve 200 com subtotal, valorImposto, totalRetencao, outrosEncargos, totalGeral e a lista linhas.

Erros específicos

STOCK_INSUFICIENTE · ESTABELECIMENTO_OBRIGATORIO · ARMAZEM_OBRIGATORIO · REFERENCIA_NAO_ENCONTRADA — além dos gerais.

Pedido

curl
curl -X POST 'https://<endereço-da-API>/api/documentos/pre-calculo' \
  -H 'X-Api-Key: <a-sua-chave>' \
  -H 'Idempotency-Key: <um-GUID-novo>' \
  -H 'Content-Type: application/json' \
  -d '{
  "tipoDocumentoId": "00000000-0000-0000-0000-000000000000",
  "itens": [
    {
      "produtoId": "00000000-0000-0000-0000-000000000000",
      "quantidade": 0,
      "precoUnitario": 0,
      "descontoPercentual": 0
    }
  ],
  "pagamentos": [
    {
      "metodoPagamentoId": "00000000-0000-0000-0000-000000000000",
      "valor": 0
    }
  ]
}'
POST/api/documentos/notas-credito#

Emite uma nota de crédito sobre uma factura ou factura/recibo: devolução ou correcção, total ou parcial.

  • Permissão Documentos.Anular
  • Idempotência aceita Idempotency-Key

Indique o documento original, o motivo e as linhas (documentoItemId) com a quantidade a creditar (omitida = a linha inteira).

Creditar todas as linhas anula a factura; creditar algumas rectifica-a. O stock volta ao armazém.

Numa factura/recibo paga no acto, metodoReembolsoId diz por onde o dinheiro volta; numa factura a crédito, o valor abate à conta corrente do cliente.

Uma linha que já foi creditada não pode ser creditada outra vez (DOCUMENTO_JA_CREDITADO).

Aceita Idempotency-Key; envie sempre.

Corpo do pedido (JSON · CreateNotaCreditoCommand)

CampoTipoObrigatórioSignificado
documentoOriginalIdidentificador (UUID)sim
motivotextosim
metodoReembolsoIdidentificador (UUID) ou nulo
numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
itenslista de objectossim
itens[].documentoItemIdidentificador (UUID)sim
itens[].quantidadenúmero ou nuloA quantidade.
autorizacaoSupervisorIdidentificador (UUID) ou nulo

Resposta

Devolve 201 com { "id": "…" } da nota de crédito.

Erros específicos

DOCUMENTO_JA_CREDITADO · METODO_PAGAMENTO_INACTIVO · REFERENCIA_NAO_ENCONTRADA — além dos gerais.

Exemplo

Creditar uma linha (devolução): repõe o stock e reembolsa pelo método indicado

Pedido
curl -X POST 'https://<endereço-da-API>/api/documentos/notas-credito' \
  -H 'Idempotency-Key: 1a2be5c9-50c6-4b73-a8df-9a4c010b7624' \
  -H 'X-Api-Key: assw_v1_<chave>' \
  -H 'Content-Type: application/json' \
  -d '{
  "documentoOriginalId": "01a12f69-9a59-714a-9d67-10d65ba202cf",
  "motivo": "Devolução do cliente",
  "metodoReembolsoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
  "itens": [
    {
      "documentoItemId": "01a12f69-9a75-71ff-8c4f-163cce92fd02",
      "quantidade": 1
    }
  ]
}'
Pedido
const resposta = await fetch('https://<endereço-da-API>/api/documentos/notas-credito', {
  method: 'POST',
  headers: {
    "Idempotency-Key": "1a2be5c9-50c6-4b73-a8df-9a4c010b7624",
    "X-Api-Key": "assw_v1_<chave>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "documentoOriginalId": "01a12f69-9a59-714a-9d67-10d65ba202cf",
    "motivo": "Devolução do cliente",
    "metodoReembolsoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
    "itens": [
      {
        "documentoItemId": "01a12f69-9a75-71ff-8c4f-163cce92fd02",
        "quantidade": 1
      }
    ]
  }),
})
const dados = await resposta.json()
Pedido
import requests

resposta = requests.post(
    'https://<endereço-da-API>/api/documentos/notas-credito',
    headers={
        'Idempotency-Key': '1a2be5c9-50c6-4b73-a8df-9a4c010b7624',
        'X-Api-Key': 'assw_v1_<chave>',
        'Content-Type': 'application/json'
    },
    json={
        'documentoOriginalId': '01a12f69-9a59-714a-9d67-10d65ba202cf',
        'motivo': 'Devolução do cliente',
        'metodoReembolsoId': '9dde532b-0092-4a68-b2dc-18649f0c97c4',
        'itens': [
            {
                'documentoItemId': '01a12f69-9a75-71ff-8c4f-163cce92fd02',
                'quantidade': 1
            }
        ]
    },
)
dados = resposta.json()
Pedido
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Post, "/api/documentos/notas-credito");
pedido.Headers.Add("Idempotency-Key", "1a2be5c9-50c6-4b73-a8df-9a4c010b7624");
pedido.Headers.Add("X-Api-Key", "assw_v1_<chave>");
pedido.Content = new StringContent("""
{
  "documentoOriginalId": "01a12f69-9a59-714a-9d67-10d65ba202cf",
  "motivo": "Devolução do cliente",
  "metodoReembolsoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
  "itens": [
    {
      "documentoItemId": "01a12f69-9a75-71ff-8c4f-163cce92fd02",
      "quantidade": 1
    }
  ]
}
""", Encoding.UTF8, "application/json");
using var resposta = await cliente.SendAsync(pedido);
var texto = await resposta.Content.ReadAsStringAsync();

201 Created Resposta

Resposta
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1
location: /api/documentos/01a12f69-9ae0-786d-b5e9-b0aad1e5ab09

{
  "id": "01a12f69-9ae0-786d-b5e9-b0aad1e5ab09"
}
POST/api/documentos/recibos#

Emite um recibo: o cliente liquida, total ou parcialmente, uma ou várias facturas a crédito de uma só vez.

  • Permissão Documentos.Emitir
  • Idempotência aceita Idempotency-Key

liquidacoes lista as facturas e o valor a liquidar de cada uma (nunca mais do que o pendente). Use GET /api/documentos/pendentes.

Mais antigas primeiro: não se liquida uma factura recente deixando uma mais antiga por cobrir (mesmo parcialmente).

Um só método de pagamento por recibo. «Conta Corrente» não liquida dívida.

Corpo do pedido (JSON · CreateReciboCommand)

CampoTipoObrigatórioSignificado
clienteIdidentificador (UUID)simO cliente do documento.
metodoPagamentoIdidentificador (UUID)simO método de pagamento.
numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
observacaotexto ou nuloO texto livre.
liquidacoeslista de objectossim
liquidacoes[].documentoIdidentificador (UUID)sim
liquidacoes[].valornúmerosimO valor.
lojaIdidentificador (UUID) ou nuloO estabelecimento.

Resposta

Devolve 201 com { "id": "…" } do recibo.

Erros específicos

METODO_PAGAMENTO_INACTIVO · REFERENCIA_NAO_ENCONTRADA · ESTABELECIMENTO_OBRIGATORIO — além dos gerais.

Exemplo

Emitir um Recibo que liquida a factura mais antiga do cliente

Pedido
curl -X POST 'https://<endereço-da-API>/api/documentos/recibos' \
  -H 'Idempotency-Key: 4b293f87-4473-4cf1-b647-a4f1dd78ed76' \
  -H 'X-Api-Key: assw_v1_<chave>' \
  -H 'Content-Type: application/json' \
  -d '{
  "clienteId": "01a12201-fa0a-7aac-93c4-f2d42f3c31cd",
  "metodoPagamentoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
  "lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
  "observacao": "Pagamento recebido por transferência",
  "liquidacoes": [
    {
      "documentoId": "01a12f22-0dd0-7906-98a2-607105acccc1",
      "valor": 2850
    }
  ]
}'
Pedido
const resposta = await fetch('https://<endereço-da-API>/api/documentos/recibos', {
  method: 'POST',
  headers: {
    "Idempotency-Key": "4b293f87-4473-4cf1-b647-a4f1dd78ed76",
    "X-Api-Key": "assw_v1_<chave>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "clienteId": "01a12201-fa0a-7aac-93c4-f2d42f3c31cd",
    "metodoPagamentoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
    "lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
    "observacao": "Pagamento recebido por transferência",
    "liquidacoes": [
      {
        "documentoId": "01a12f22-0dd0-7906-98a2-607105acccc1",
        "valor": 2850
      }
    ]
  }),
})
const dados = await resposta.json()
Pedido
import requests

resposta = requests.post(
    'https://<endereço-da-API>/api/documentos/recibos',
    headers={
        'Idempotency-Key': '4b293f87-4473-4cf1-b647-a4f1dd78ed76',
        'X-Api-Key': 'assw_v1_<chave>',
        'Content-Type': 'application/json'
    },
    json={
        'clienteId': '01a12201-fa0a-7aac-93c4-f2d42f3c31cd',
        'metodoPagamentoId': '9dde532b-0092-4a68-b2dc-18649f0c97c4',
        'lojaId': '01a12201-f4d4-7c07-86b7-e5b24035993e',
        'observacao': 'Pagamento recebido por transferência',
        'liquidacoes': [
            {
                'documentoId': '01a12f22-0dd0-7906-98a2-607105acccc1',
                'valor': 2850
            }
        ]
    },
)
dados = resposta.json()
Pedido
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Post, "/api/documentos/recibos");
pedido.Headers.Add("Idempotency-Key", "4b293f87-4473-4cf1-b647-a4f1dd78ed76");
pedido.Headers.Add("X-Api-Key", "assw_v1_<chave>");
pedido.Content = new StringContent("""
{
  "clienteId": "01a12201-fa0a-7aac-93c4-f2d42f3c31cd",
  "metodoPagamentoId": "9dde532b-0092-4a68-b2dc-18649f0c97c4",
  "lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
  "observacao": "Pagamento recebido por transferência",
  "liquidacoes": [
    {
      "documentoId": "01a12f22-0dd0-7906-98a2-607105acccc1",
      "valor": 2850
    }
  ]
}
""", Encoding.UTF8, "application/json");
using var resposta = await cliente.SendAsync(pedido);
var texto = await resposta.Content.ReadAsStringAsync();

201 Created Resposta

Resposta
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1
location: /api/documentos/01a12f69-9b9e-7ca9-9b4b-f4b060a860a3

{
  "id": "01a12f69-9b9e-7ca9-9b4b-f4b060a860a3"
}
POST/api/documentos/{id}/enviar-email#

Envia o documento por e-mail ao destinatário indicado.

  • Permissão Documentos.Emitir

O envio é registado em GET /api/documentos/{id}/envios.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Corpo do pedido (JSON)

CampoTipoObrigatório
destinatariotexto ou nulo

Resposta

Devolve 204 sem corpo.

Pedido

curl
curl -X POST 'https://<endereço-da-API>/api/documentos/<id>/enviar-email' \
  -H 'X-Api-Key: <a-sua-chave>' \
  -H 'Idempotency-Key: <um-GUID-novo>' \
  -H 'Content-Type: application/json' \
  -d '{}'
POST/api/documentos/rascunhos#

Guarda um rascunho de documento.

  • Permissão Documentos.Emitir
  • Idempotência aceita Idempotency-Key

Um rascunho não tem número nem efeito fiscal: só se emite quando se pede (ver «Emitir um rascunho»). Devolve o id.

Corpo do pedido (JSON · SalvarRascunhoCommand)

CampoTipoObrigatórioSignificado
ididentificador (UUID) ou nuloIdentificador único (UUID).
tipoDocumentoIdidentificador (UUID)simO tipo do documento (ver /api/documentos/tipos).
clienteIdidentificador (UUID)simO cliente do documento.
armazemIdidentificador (UUID) ou nuloO armazém de onde saiu (ou para onde voltou) o stock.
referenciaExternaIdidentificador (UUID) ou nuloO documento de referência: a factura que uma nota de crédito corrige, ou a guia ou cotação que uma factura cumpre.
descricaotexto ou nuloA descrição.
observacaotexto ou nuloO texto livre.
itenslista de objectossim
itens[].produtoIdidentificador (UUID)simO artigo.
itens[].quantidadenúmerosimA quantidade.
itens[].precoUnitarionúmerosimO preço de uma unidade, sem imposto.
itens[].descontoPercentualnúmerosimO desconto da linha, em percentagem (0 a 99).
itens[].descricaotexto ou nuloA descrição.
itens[].unidadeVendaIdidentificador (UUID) ou nulo
pagamentoslista de objectossim
pagamentos[].metodoPagamentoIdidentificador (UUID)simO método de pagamento.
pagamentos[].valornúmerosimO valor.
pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
transporteobjecto ou nulo
transporte.inicioTransportedata e hora (ISO 8601)sim
transporte.fimTransportedata e hora (ISO 8601) ou nulo
transporte.matriculatexto ou nulo
transporte.origemobjectosim
transporte.origem.detalhetextosim
transporte.origem.cidadetextosim
transporte.origem.codigoPostaltexto ou nulo
transporte.origem.paistexto
transporte.destinoobjectosim
transporte.destino.detalhetextosim
transporte.destino.cidadetextosim
transporte.destino.codigoPostaltexto ou nulo
transporte.destino.paistexto
lojaIdidentificador (UUID) ou nuloO estabelecimento.
descontoFinanceiroPercentualnúmeroO desconto financeiro do documento aplicado a esta linha, em percentagem.
outrosEncargosnúmeroEncargos somados ao total, sem imposto (portes, taxas).
referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).

Pedido

curl
curl -X POST 'https://<endereço-da-API>/api/documentos/rascunhos' \
  -H 'X-Api-Key: <a-sua-chave>' \
  -H 'Idempotency-Key: <um-GUID-novo>' \
  -H 'Content-Type: application/json' \
  -d '{
  "tipoDocumentoId": "00000000-0000-0000-0000-000000000000",
  "clienteId": "00000000-0000-0000-0000-000000000000",
  "itens": [
    {
      "produtoId": "00000000-0000-0000-0000-000000000000",
      "quantidade": 0,
      "precoUnitario": 0,
      "descontoPercentual": 0
    }
  ],
  "pagamentos": [
    {
      "metodoPagamentoId": "00000000-0000-0000-0000-000000000000",
      "valor": 0
    }
  ]
}'
PUT/api/documentos/rascunhos/{id}#

Actualiza um rascunho de documento.

  • Permissão Documentos.Emitir

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Corpo do pedido (JSON · SalvarRascunhoCommand)

CampoTipoObrigatórioSignificado
ididentificador (UUID) ou nuloIdentificador único (UUID).
tipoDocumentoIdidentificador (UUID)simO tipo do documento (ver /api/documentos/tipos).
clienteIdidentificador (UUID)simO cliente do documento.
armazemIdidentificador (UUID) ou nuloO armazém de onde saiu (ou para onde voltou) o stock.
referenciaExternaIdidentificador (UUID) ou nuloO documento de referência: a factura que uma nota de crédito corrige, ou a guia ou cotação que uma factura cumpre.
descricaotexto ou nuloA descrição.
observacaotexto ou nuloO texto livre.
itenslista de objectossim
itens[].produtoIdidentificador (UUID)simO artigo.
itens[].quantidadenúmerosimA quantidade.
itens[].precoUnitarionúmerosimO preço de uma unidade, sem imposto.
itens[].descontoPercentualnúmerosimO desconto da linha, em percentagem (0 a 99).
itens[].descricaotexto ou nuloA descrição.
itens[].unidadeVendaIdidentificador (UUID) ou nulo
pagamentoslista de objectossim
pagamentos[].metodoPagamentoIdidentificador (UUID)simO método de pagamento.
pagamentos[].valornúmerosimO valor.
pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).
transporteobjecto ou nulo
transporte.inicioTransportedata e hora (ISO 8601)sim
transporte.fimTransportedata e hora (ISO 8601) ou nulo
transporte.matriculatexto ou nulo
transporte.origemobjectosim
transporte.origem.detalhetextosim
transporte.origem.cidadetextosim
transporte.origem.codigoPostaltexto ou nulo
transporte.origem.paistexto
transporte.destinoobjectosim
transporte.destino.detalhetextosim
transporte.destino.cidadetextosim
transporte.destino.codigoPostaltexto ou nulo
transporte.destino.paistexto
lojaIdidentificador (UUID) ou nuloO estabelecimento.
descontoFinanceiroPercentualnúmeroO desconto financeiro do documento aplicado a esta linha, em percentagem.
outrosEncargosnúmeroEncargos somados ao total, sem imposto (portes, taxas).
referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).

Pedido

curl
curl -X PUT 'https://<endereço-da-API>/api/documentos/rascunhos/<id>' \
  -H 'X-Api-Key: <a-sua-chave>' \
  -H 'Content-Type: application/json' \
  -d '{
  "tipoDocumentoId": "00000000-0000-0000-0000-000000000000",
  "clienteId": "00000000-0000-0000-0000-000000000000",
  "itens": [
    {
      "produtoId": "00000000-0000-0000-0000-000000000000",
      "quantidade": 0,
      "precoUnitario": 0,
      "descontoPercentual": 0
    }
  ],
  "pagamentos": [
    {
      "metodoPagamentoId": "00000000-0000-0000-0000-000000000000",
      "valor": 0
    }
  ]
}'
GET/api/documentos/rascunhos#

Lista os rascunhos de documento.

  • Permissão Documentos.Emitir

tipoDocumentoId filtra por tipo de documento.

Parâmetros

NomeOndeTipoObrigatório
tipoDocumentoIdna pesquisaidentificador (UUID)

Resposta (200 · JSON)

CampoTipoSignificado
[].ididentificador (UUID)Identificador único (UUID).
[].usuarioIdidentificador (UUID)
[].tipoDocumentoIdidentificador (UUID)O tipo do documento (ver /api/documentos/tipos).
[].siglaDocumentotextoA sigla do tipo («FT», «FR», «NC»…).
[].clienteIdidentificador (UUID)O cliente do documento.
[].clienteNometextoO nome do cliente tal como estava na emissão.
[].descricaotexto ou nuloA descrição.
[].numeroLinhasnúmero inteiro
[].totalEstimadonúmero
[].criadoEmdata e hora (ISO 8601)
[].actualizadoEmdata e hora (ISO 8601)

Pedido

curl
curl 'https://<endereço-da-API>/api/documentos/rascunhos' \
  -H 'X-Api-Key: <a-sua-chave>'
GET/api/documentos/rascunhos/{id}#

Um rascunho de documento, com as linhas.

  • Permissão Documentos.Emitir

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Resposta (200 · JSON)

CampoTipoSignificado
ididentificador (UUID)Identificador único (UUID).
usuarioIdidentificador (UUID)
tipoDocumentoIdidentificador (UUID)O tipo do documento (ver /api/documentos/tipos).
clienteIdidentificador (UUID)O cliente do documento.
armazemIdidentificador (UUID) ou nuloO armazém de onde saiu (ou para onde voltou) o stock.
referenciaExternaIdidentificador (UUID) ou nuloO documento de referência: a factura que uma nota de crédito corrige, ou a guia ou cotação que uma factura cumpre.
descricaotexto ou nuloA descrição.
observacaotexto ou nuloO texto livre.
criadoEmdata e hora (ISO 8601)
actualizadoEmdata e hora (ISO 8601)
descontoFinanceiroPercentualnúmeroO desconto financeiro do documento aplicado a esta linha, em percentagem.
outrosEncargosnúmeroEncargos somados ao total, sem imposto (portes, taxas).
referenciaClientetexto ou nuloA referência do cliente («V/Referência»).
dataVencimentodata (AAAA-MM-DD) ou nuloO dia do vencimento (facturas a crédito) ou da validade (cotações).
itenslista de objectos
itens[].ididentificador (UUID)Identificador único (UUID).
itens[].produtoIdidentificador (UUID)O artigo.
itens[].produtoNometexto
itens[].quantidadenúmeroA quantidade.
itens[].precoUnitarionúmeroO preço de uma unidade, sem imposto.
itens[].descontoPercentualnúmeroO desconto da linha, em percentagem (0 a 99).
pagamentoslista de objectos
pagamentos[].ididentificador (UUID)Identificador único (UUID).
pagamentos[].metodoPagamentoIdidentificador (UUID)O método de pagamento.
pagamentos[].valornúmeroO valor.
pagamentos[].numeroOperacaoBancariatexto ou nuloO número da operação bancária (opcional).
pagamentos[].dataOperacaoBancariadata e hora (ISO 8601) ou nuloA data da operação bancária (opcional).

Pedido

curl
curl 'https://<endereço-da-API>/api/documentos/rascunhos/<id>' \
  -H 'X-Api-Key: <a-sua-chave>'
DELETE/api/documentos/rascunhos/{id}#

Elimina um rascunho.

  • Permissão Documentos.Emitir

Só os rascunhos se eliminam: um documento emitido nunca se apaga.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Pedido

curl
curl -X DELETE 'https://<endereço-da-API>/api/documentos/rascunhos/<id>' \
  -H 'X-Api-Key: <a-sua-chave>'
POST/api/documentos/rascunhos/{id}/emitir#

Emite o documento que o rascunho descreve: passa a ter número e assinatura.

  • Permissão Documentos.Emitir

É uma emissão fiscal, com as mesmas regras de POST /api/documentos.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Pedido

curl
curl -X POST 'https://<endereço-da-API>/api/documentos/rascunhos/<id>/emitir' \
  -H 'X-Api-Key: <a-sua-chave>'
POST/api/documentos/recibos/{id}/anular#

Anula um recibo, com o motivo.

  • Permissão Documentos.Anular
  • Idempotência aceita Idempotency-Key

O recibo é o único documento que se anula desta forma; os outros corrigem-se com uma nota de crédito. O dinheiro é estornado por método de pagamento.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Corpo do pedido (JSON · AnularReciboRequest)

CampoTipoObrigatório
motivotextosim

Pedido

curl
curl -X POST 'https://<endereço-da-API>/api/documentos/recibos/<id>/anular' \
  -H 'X-Api-Key: <a-sua-chave>' \
  -H 'Idempotency-Key: <um-GUID-novo>' \
  -H 'Content-Type: application/json' \
  -d '{
  "motivo": "texto"
}'
POST/api/documentos/{id}/enviar-lembrete-pagamento#

Envia ao cliente, por e-mail, um lembrete de pagamento de uma factura a crédito por receber.

  • Permissão Documentos.Emitir
  • Idempotência aceita Idempotency-Key

Sem destinatário, usa o e-mail do cliente. O texto («vence em breve» ou «venceu») decide-se no dia em que sai. Não é idempotente.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Corpo do pedido (JSON)

CampoTipoObrigatório
destinatariotexto ou nulo

Pedido

curl
curl -X POST 'https://<endereço-da-API>/api/documentos/<id>/enviar-lembrete-pagamento' \
  -H 'X-Api-Key: <a-sua-chave>' \
  -H 'Idempotency-Key: <um-GUID-novo>' \
  -H 'Content-Type: application/json' \
  -d '{}'
POST/api/documentos/{id}/impressoes#

Regista que o documento vai ser impresso e diz se é o «Original» ou uma reimpressão («2.ª via, em conformidade com a original»).

  • Permissão Documentos.Ler

A distinção vem do DP 71/25, art. 7.º n.º 4 e 5. Cada chamada conta uma impressão.

Parâmetros

NomeOndeTipoObrigatório
idno caminhoidentificador (UUID)sim

Resposta (200 · JSON)

CampoTipo
sequencianúmero inteiro
originalverdadeiro/falso
mencaotexto

Pedido

curl
curl -X POST 'https://<endereço-da-API>/api/documentos/<id>/impressoes' \
  -H 'X-Api-Key: <a-sua-chave>'