Referência
Stock e armazéns
Armazéns, saldos, lotes e movimentos. Uma venda baixa o stock sozinha; aqui está o que se faz por fora de uma venda: compras (entradas) e saídas manuais.
Armazéns, saldos, lotes e movimentos. Uma venda baixa o stock sozinha; aqui está o que se faz por fora de uma venda: compras (entradas) e saídas manuais.
| Operação | O que faz |
|---|---|
GET /api/estoque/armazens | Os armazéns, cada um com o estabelecimento a que pertence. |
GET /api/estoque/armazens/{id} | Um armazém. |
GET /api/estoque/saldos | Os saldos de stock, por artigo, armazém e lote. |
GET /api/estoque/saldos/baixo-estoque | Os artigos abaixo do stock mínimo definido no cadastro. |
GET /api/estoque/saldos/por-produtos | O saldo de vários artigos de uma vez, num armazém. |
GET /api/estoque/saldos/historico/{produtoId} | Os movimentos de stock de um artigo (entradas, saídas, transferências), do mais recente para o mais antigo, com o saldo depois de cada um. |
GET /api/estoque/lotes | Os lotes (com validade) de um ou de todos os artigos. |
GET /api/estoque/lotes/{id} | Um lote. |
GET /api/estoque/entradas | As compras (entradas de stock) registadas. |
GET /api/estoque/entradas/{id} | Uma compra, com as linhas, os custos e os pagamentos. |
POST /api/estoque/entradas | Regista uma compra a um fornecedor: dá entrada no stock e cria a conta a pagar. |
GET /api/estoque/saidas-manuais | As saídas manuais de stock (quebras, ofertas, consumo interno). |
GET /api/estoque/saidas-manuais/{id} | Uma saída manual. |
POST /api/estoque/saidas-manuais | Regista uma saída de stock que não é uma venda, com o motivo. |
POST /api/estoque/armazens | Cria um armazém num estabelecimento. |
PUT /api/estoque/armazens/{id} | Altera um armazém. |
POST /api/estoque/armazens/{id}/predefinir | Faz deste armazém o predefinido do estabelecimento (o que as vendas usam quando não se indica outro). |
DELETE /api/estoque/armazens/{id} | Elimina um armazém. |
POST /api/estoque/lotes | Cria um lote (descrição e validade). |
PUT /api/estoque/lotes/{id} | Altera um lote. |
DELETE /api/estoque/lotes/{id} | Elimina um lote. |
POST /api/estoque/saldos/retirar | Retira stock de um artigo, sempre o mais antigo primeiro (FIFO). |
POST /api/estoque/entradas-manuais | Dá entrada de stock sem fornecedor nem factura (stock inicial, ajuste positivo de inventário). |
POST /api/estoque/entradas/{id}/anexo | Anexa à entrada de stock a imagem ou o PDF do documento do fornecedor. |
GET /api/estoque/entradas/{id}/anexo | Descarrega o anexo de uma entrada de stock. |
DELETE /api/estoque/entradas/{id}/anexo | Remove o anexo de uma entrada de stock. |
POST /api/estoque/transferencias | Transfere stock de um armazém para outro. |
GET /api/estoque/transferencias/recentes | As transferências mais recentes. |
GET /api/estoque/transferencias/produtos | Pesquisa de artigos com stock no armazém de origem, para preparar uma transferência. |
GET /api/estoque/transferencias/disponibilidade | O stock disponível no armazém de origem para uma lista de artigos. |
GET /api/estoque/transferencias/estoque-no-destino | O stock que uma lista de artigos já tem no armazém de destino. |
GET /api/estoque/transferencias/pendentes | As transferências à espera de confirmação. |
POST /api/estoque/transferencias/{id}/confirmar | Confirma uma transferência: o stock passa para o destino. |
POST /api/estoque/transferencias/{id}/rejeitar | Rejeita uma transferência (com um motivo, opcional): o stock fica na origem. |
GET /api/estoque/transferencias/{id} | Uma transferência de stock, com as linhas. |
GET /api/estoque/transferencias | Lista as transferências de stock. |
POST /api/estoque/reservas-stock | Cria um pedido de reserva de stock a um cliente, por um prazo. |
GET /api/estoque/reservas-stock/activos | Os pedidos de reserva de stock activos. |
GET /api/estoque/reservas-stock/activos/resumo | Os totais de todas as reservas de stock activas. |
GET /api/estoque/reservas-stock/cliente/{clienteId} | As reservas de stock activas de um cliente. |
GET /api/estoque/reservas-stock/historico | O histórico dos pedidos de reserva de stock. |
GET /api/estoque/reservas-stock/produtos | Pesquisa de artigos para reservar, com o stock de um armazém. |
GET /api/estoque/reservas-stock/disponibilidade | O stock disponível para reservar, de uma lista de artigos num armazém. |
POST /api/estoque/reservas-stock/{id}/linhas/{linhaId}/confirmar | Confirma uma linha de um pedido de reserva: o stock fica reservado. |
POST /api/estoque/reservas-stock/{id}/prorrogar | Prorroga o prazo de um pedido de reserva de stock. |
POST /api/estoque/reservas-stock/{id}/cancelar | Cancela um pedido de reserva de stock (com um motivo, opcional): o stock volta a ficar livre. |
GET /api/estoque/reservas/disponibilidade | Onde um artigo tem stock disponível, em toda a empresa. |
GET /api/estoque/reservas | Lista as reservas de stock entre estabelecimentos. |
POST /api/estoque/reservas | Pede stock a outro estabelecimento (uma reserva entre estabelecimentos). |
POST /api/estoque/reservas/{id}/confirmar | O estabelecimento de origem confirma uma reserva de stock. |
POST /api/estoque/reservas/{id}/recusar | O estabelecimento de origem recusa uma reserva de stock (com um motivo, opcional). |
GET /api/estoque/guias-transferencia | As guias de transferência interna: o documento interno que acompanha cada transferência. |
POST /api/estoque/guias-transferencia/{id}/confirmar-recepcao | Confirma a recepção da mercadoria de uma guia de transferência interna. |
/api/estoque/armazens#Os armazéns, cada um com o estabelecimento a que pertence.
O id é o armazemId dos documentos que movimentam stock. Um documento só pode usar um armazém do seu estabelecimento.
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
filtro | na pesquisa | texto | |
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro | |
todasAsLojas | na pesquisa | verdadeiro/falso |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].descricao | texto | A descrição. |
itens[].localizacao | texto | Onde fica o armazém. |
itens[].predefinido | verdadeiro/falso | Verdadeiro no armazém por omissão do estabelecimento. |
itens[].lojaId | identificador (UUID) | O estabelecimento. |
itens[].lojaNome | texto | |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Exemplo
Os armazéns do estabelecimento
curl 'https://<endereço-da-API>/api/estoque/armazens?tamanho=5' \
-H 'X-Api-Key: assw_v1_<chave>'
const resposta = await fetch('https://<endereço-da-API>/api/estoque/armazens?tamanho=5', {
method: 'GET',
headers: {
"X-Api-Key": "assw_v1_<chave>"
},
})
const dados = await resposta.json()
import requests
resposta = requests.get(
'https://<endereço-da-API>/api/estoque/armazens?tamanho=5',
headers={
'X-Api-Key': 'assw_v1_<chave>'
},
)
dados = resposta.json()
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Get, "/api/estoque/armazens?tamanho=5");
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
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1
{
"itens": [
{
"id": "01a12201-f4d4-7215-996c-6e230d2c67f6",
"descricao": "Armazém Principal",
"localizacao": "Loja de Viana",
"predefinido": true,
"lojaId": "01a12201-f4d4-7da7-a880-4239624940d5",
"lojaNome": "Loja de Viana"
},
{
"id": "01a12201-f4d4-78a0-8dde-1efc41b94776",
"descricao": "Armazém Principal",
"localizacao": "Loja Central",
"predefinido": true,
"lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
"lojaNome": "Loja Central"
},
{
"id": "01a12201-fc2b-7c7c-801f-ebf0cc7fbebc",
"descricao": "Armazém de Reserva",
"localizacao": "Loja Central — traseiras",
"predefinido": false,
"lojaId": "01a12201-f4d4-7c07-86b7-e5b24035993e",
"lojaNome": "Loja Central"
}
],
"proximoCursor": null
}
/api/estoque/armazens/{id}#Um armazém.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
id | identificador (UUID) | Identificador único (UUID). |
descricao | texto | A descrição. |
localizacao | texto | Onde fica o armazém. |
predefinido | verdadeiro/falso | Verdadeiro no armazém por omissão do estabelecimento. |
lojaId | identificador (UUID) | O estabelecimento. |
lojaNome | texto |
Erros específicos
NAO_ENCONTRADO — além dos gerais.
Pedido
curl 'https://<endereço-da-API>/api/estoque/armazens/<id>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/saldos#Os saldos de stock, por artigo, armazém e lote.
Filtre por armazemId, lojaId ou produtoId. diasParaVencer mostra só o que vence dentro desse número de dias (0 = o que já expirou).
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
armazemId | na pesquisa | identificador (UUID) | |
lojaId | na pesquisa | identificador (UUID) | |
produtoId | na pesquisa | identificador (UUID) | |
diasParaVencer | na pesquisa | número inteiro | |
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].produtoId | identificador (UUID) | O artigo. |
itens[].produtoNome | texto | |
itens[].codigoBarra | texto ou nulo | O código de barras. |
itens[].precoCusto | número ou nulo | O custo do artigo. |
itens[].precoUnitario | número | O preço de uma unidade, sem imposto. |
itens[].armazemId | identificador (UUID) | O armazém de onde saiu (ou para onde voltou) o stock. |
itens[].armazemDescricao | texto | O nome do armazém. |
itens[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
itens[].loteDescricao | texto ou nulo | O nome do lote. |
itens[].loteValidade | data e hora (ISO 8601) ou nulo | |
itens[].quantidade | número | A quantidade. |
itens[].valor | número | O valor. |
itens[].criadoEmUtc | data e hora (ISO 8601) | Quando o evento aconteceu (UTC). |
itens[].reservado | número | |
itens[].disponivel | número | |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Exemplo
O stock de um artigo num armazém
curl 'https://<endereço-da-API>/api/estoque/saldos?produtoId=01a12201-fa97-7f9b-8eec-2f731b91a53b&armazemId=01a12201-f4d4-78a0-8dde-1efc41b94776&tamanho=5' \
-H 'X-Api-Key: assw_v1_<chave>'
const resposta = await fetch('https://<endereço-da-API>/api/estoque/saldos?produtoId=01a12201-fa97-7f9b-8eec-2f731b91a53b&armazemId=01a12201-f4d4-78a0-8dde-1efc41b94776&tamanho=5', {
method: 'GET',
headers: {
"X-Api-Key": "assw_v1_<chave>"
},
})
const dados = await resposta.json()
import requests
resposta = requests.get(
'https://<endereço-da-API>/api/estoque/saldos?produtoId=01a12201-fa97-7f9b-8eec-2f731b91a53b&armazemId=01a12201-f4d4-78a0-8dde-1efc41b94776&tamanho=5',
headers={
'X-Api-Key': 'assw_v1_<chave>'
},
)
dados = resposta.json()
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Get, "/api/estoque/saldos?produtoId=01a12201-fa97-7f9b-8eec-2f731b91a53b&armazemId=01a12201-f4d4-78a0-8dde-1efc41b94776&tamanho=5");
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
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1
{
"itens": [
{
"id": "01a12201-fdea-7fb7-9b78-d253ceb46151",
"produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
"produtoNome": "Arroz agulha 5 kg",
"codigoBarra": "560000100137",
"precoCusto": 5000,
"precoUnitario": 6500,
"armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
"armazemDescricao": "Armazém Principal",
"loteId": null,
"loteDescricao": null,
"loteValidade": null,
"quantidade": 536,
"valor": 2680000,
"criadoEmUtc": "2026-10-09T18:51:57.89556Z",
"reservado": 0,
"disponivel": 536
}
],
"proximoCursor": null
}
/api/estoque/saldos/baixo-estoque#Os artigos abaixo do stock mínimo definido no cadastro.
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
lojaId | na pesquisa | identificador (UUID) | |
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].produtoId | identificador (UUID) | O artigo. |
itens[].produtoNome | texto | |
itens[].codigoBarra | texto ou nulo | O código de barras. |
itens[].precoCusto | número ou nulo | O custo do artigo. |
itens[].precoUnitario | número | O preço de uma unidade, sem imposto. |
itens[].lojaId | identificador (UUID) | O estabelecimento. |
itens[].lojaNome | texto | |
itens[].estoqueMinimo | número | |
itens[].quantidadeTotal | número | |
itens[].valor | número | O valor. |
itens[].reservado | número | |
itens[].disponivel | número | |
itens[].paraVenda | verdadeiro/falso | |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/saldos/baixo-estoque' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/saldos/por-produtos#O saldo de vários artigos de uma vez, num armazém.
Repita produtoIds na pesquisa (?armazemId=…&produtoIds=a&produtoIds=b). Útil para validar um carrinho antes de emitir.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
armazemId | na pesquisa | identificador (UUID) | sim |
produtoIds | na pesquisa | lista de identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].produtoId | identificador (UUID) | O artigo. |
[].quantidade | número | A quantidade. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/saldos/por-produtos' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/saldos/historico/{produtoId}#Os movimentos de stock de um artigo (entradas, saídas, transferências), do mais recente para o mais antigo, com o saldo depois de cada um.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
produtoId | no caminho | identificador (UUID) | sim |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].data | data e hora (ISO 8601) | A data e hora (UTC). |
[].armazemDescricao | texto | O nome do armazém. |
[].loteDescricao | texto ou nulo | O nome do lote. |
[].tipo | texto | |
[].quantidade | número | A quantidade. |
[].saldoAposMovimento | número | O saldo depois deste movimento. |
[].documento | texto ou nulo |
Pedido
curl 'https://<endereço-da-API>/api/estoque/saldos/historico/<produtoId>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/lotes#Os lotes (com validade) de um ou de todos os artigos.
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
filtro | na pesquisa | texto | |
produtoId | na pesquisa | identificador (UUID) | |
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].descricao | texto | A descrição. |
itens[].validade | data e hora (ISO 8601) ou nulo | A data de validade do lote. |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/lotes' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/lotes/{id}#Um lote.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
id | identificador (UUID) | Identificador único (UUID). |
descricao | texto | A descrição. |
validade | data e hora (ISO 8601) ou nulo | A data de validade do lote. |
Erros específicos
NAO_ENCONTRADO — além dos gerais.
Pedido
curl 'https://<endereço-da-API>/api/estoque/lotes/<id>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/entradas#As compras (entradas de stock) registadas.
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
itens[].data | data e hora (ISO 8601) | A data e hora (UTC). |
itens[].factura | texto | |
itens[].tipoDocumento | texto | |
itens[].fornecedorNome | texto | |
itens[].armazemDescricao | texto | O nome do armazém. |
itens[].total | número | O total. |
itens[].vencimento | data e hora (ISO 8601) | O dia do vencimento. |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/entradas' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/entradas/{id}#Uma compra, com as linhas, os custos e os pagamentos.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
id | identificador (UUID) | Identificador único (UUID). |
numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
data | data e hora (ISO 8601) | A data e hora (UTC). |
factura | texto | |
tipoDocumento | texto | |
dataFactura | data e hora (ISO 8601) | |
fornecedorId | identificador (UUID) | |
fornecedorNome | texto | |
armazemId | identificador (UUID) | O armazém de onde saiu (ou para onde voltou) o stock. |
armazemDescricao | texto | O nome do armazém. |
condicaoPagamento | texto | |
vencimento | data e hora (ISO 8601) | O dia do vencimento. |
observacao | texto ou nulo | O texto livre. |
custosAdicionais | número | |
anexoNomeOriginal | texto ou nulo | |
anexoTipoConteudo | texto ou nulo | |
anexoTamanhoBytes | número inteiro ou nulo | |
total | número | O total. |
moedaCodigo | texto ou nulo | |
cambio | número ou nulo | |
valorNaMoeda | número ou nulo | |
itens | lista de objectos | |
itens[].produtoId | identificador (UUID) | O artigo. |
itens[].produtoNome | texto | |
itens[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
itens[].loteDescricao | texto ou nulo | O nome do lote. |
itens[].precoUnitario | número | O preço de uma unidade, sem imposto. |
itens[].quantidade | número | A quantidade. |
itens[].descontoPercentual | número | O desconto da linha, em percentagem (0 a 99). |
itens[].impostoPercentual | número | A taxa de IVA aplicada, em percentagem. |
itens[].precoTotal | número | Preço × quantidade, antes do desconto. |
itens[].valorDesconto | número | O valor do desconto. |
itens[].subtotal | número | A soma das linhas, já com desconto e sem imposto. |
itens[].valorImposto | número | O IVA. |
itens[].valorPagar | número | O total da linha: subtotal + imposto − retenção. |
pagamentos | lista de objectos | |
pagamentos[].id | identificador (UUID) | Identificador único (UUID). |
pagamentos[].metodoPagamentoId | identificador (UUID) | O método de pagamento. |
pagamentos[].metodoPagamentoDescricao | texto | |
pagamentos[].valor | número | O valor. |
pagamentos[].data | data e hora (ISO 8601) | A data e hora (UTC). |
totalPago | número | |
divida | número | |
identidade | objecto ou nulo | |
identidade.empresa | objecto | |
identidade.empresa.nome | texto | O nome. |
identidade.empresa.numeroContribuinte | texto ou nulo | O número de contribuinte (NIF). |
identidade.empresa.endereco | texto ou nulo | A morada. |
identidade.empresa.telefone | texto ou nulo | O telefone. |
identidade.empresa.email | texto | O endereço de e-mail. |
identidade.empresa.website | texto ou nulo | |
identidade.empresa.temLogotipo | verdadeiro/falso | |
identidade.empresa.informacaoFactura | texto ou nulo | |
identidade.empresa.contasBancarias | lista de objectos | |
identidade.empresa.numeroCertificadoAgt | texto ou nulo | |
identidade.empresaGestora | verdadeiro/falso | |
identidade.rodapeDaMarca | objecto ou nulo | |
identidade.rodapeDaMarca.titulo | texto | |
identidade.rodapeDaMarca.mensagem | texto | |
identidade.rodapeDaMarca.site | texto | |
identidade.rodapeDaMarca.email | texto | O endereço de e-mail. |
identidade.rodapeDaMarca.telefone | texto | O telefone. |
identidade.rodapeDaMarca.pilares | lista de texto | |
identidade.rodapeDaMarca.comLogotipo | verdadeiro/falso | |
identidade.mostraRodapeDoPlano | verdadeiro/falso |
Erros específicos
NAO_ENCONTRADO — além dos gerais.
Pedido
curl 'https://<endereço-da-API>/api/estoque/entradas/<id>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/entradas#Regista uma compra a um fornecedor: dá entrada no stock e cria a conta a pagar.
factura é o número da factura do fornecedor. Com tipoDocumento: "FacturaRecibo" a compra tem de vir paga por inteiro (valorPago e metodoPagamentoId); com "Factura" fica por pagar, com o vencimento da condicaoPagamento.
Cada linha leva precoUnitario, quantidade e impostoPercentual; um artigo com validade exige loteId.
atualizarPrecoCusto e atualizarPrecoVenda fazem a compra actualizar o custo e os preços do artigo.
Aceita Idempotency-Key.
Corpo do pedido (JSON · CreateEntradaEstoqueCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
factura | texto | sim | |
tipoDocumento | uma de: «FacturaRecibo», «Factura» | sim | |
dataFactura | data e hora (ISO 8601) | sim | |
fornecedorId | identificador (UUID) | sim | |
armazemId | identificador (UUID) | sim | O armazém de onde saiu (ou para onde voltou) o stock. |
condicaoPagamento | uma de: «ProntoPagamento», «Dias30», «Dias60», «Dias90», «Dias120» | sim | |
observacao | texto ou nulo | O texto livre. | |
itens | lista de objectos | sim | |
itens[].produtoId | identificador (UUID) | sim | O artigo. |
itens[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. | |
itens[].precoUnitario | número | sim | O preço de uma unidade, sem imposto. |
itens[].quantidade | número | sim | A quantidade. |
itens[].descontoPercentual | número | sim | O desconto da linha, em percentagem (0 a 99). |
itens[].impostoPercentual | número | sim | A taxa de IVA aplicada, em percentagem. |
valorPago | número | ||
metodoPagamentoId | identificador (UUID) ou nulo | O método de pagamento. | |
atualizarPrecoCusto | verdadeiro/falso | ||
atualizarPrecoVenda | verdadeiro/falso | ||
custosAdicionais | número | ||
percentagemIvaDedutivel | número ou nulo | ||
moedaCodigo | texto ou nulo | ||
cambio | número ou nulo |
Resposta
Devolve 201 com { "id": "…" }.
Erros específicos
REFERENCIA_NAO_ENCONTRADA · ERRO_DE_VALIDACAO · IDEMPOTENCIA_CONFLITO — além dos gerais.
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/entradas' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"factura": "texto",
"tipoDocumento": "FacturaRecibo",
"dataFactura": "2026-10-12T09:00:00Z",
"fornecedorId": "00000000-0000-0000-0000-000000000000",
"armazemId": "00000000-0000-0000-0000-000000000000",
"condicaoPagamento": "ProntoPagamento",
"itens": [
{
"produtoId": "00000000-0000-0000-0000-000000000000",
"precoUnitario": 0,
"quantidade": 0,
"descontoPercentual": 0,
"impostoPercentual": 0
}
]
}'
/api/estoque/saidas-manuais#As saídas manuais de stock (quebras, ofertas, consumo interno).
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
dataInicio | na pesquisa | data e hora (ISO 8601) | |
dataFim | na pesquisa | data e hora (ISO 8601) | |
lojaId | na pesquisa | identificador (UUID) | |
nomeProduto | na pesquisa | texto | |
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
itens[].data | data e hora (ISO 8601) | A data e hora (UTC). |
itens[].produtoId | identificador (UUID) | O artigo. |
itens[].produtoNome | texto | |
itens[].armazemId | identificador (UUID) | O armazém de onde saiu (ou para onde voltou) o stock. |
itens[].armazemDescricao | texto | O nome do armazém. |
itens[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
itens[].loteDescricao | texto ou nulo | O nome do lote. |
itens[].quantidade | número | A quantidade. |
itens[].motivo | texto | |
itens[].identidade | objecto ou nulo | |
itens[].identidade.empresa | objecto | |
itens[].identidade.empresaGestora | verdadeiro/falso | |
itens[].identidade.rodapeDaMarca | objecto ou nulo | |
itens[].identidade.mostraRodapeDoPlano | verdadeiro/falso | |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/saidas-manuais' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/saidas-manuais/{id}#Uma saída manual.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
id | identificador (UUID) | Identificador único (UUID). |
numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
data | data e hora (ISO 8601) | A data e hora (UTC). |
produtoId | identificador (UUID) | O artigo. |
produtoNome | texto | |
armazemId | identificador (UUID) | O armazém de onde saiu (ou para onde voltou) o stock. |
armazemDescricao | texto | O nome do armazém. |
loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
loteDescricao | texto ou nulo | O nome do lote. |
quantidade | número | A quantidade. |
motivo | texto | |
identidade | objecto ou nulo | |
identidade.empresa | objecto | |
identidade.empresa.nome | texto | O nome. |
identidade.empresa.numeroContribuinte | texto ou nulo | O número de contribuinte (NIF). |
identidade.empresa.endereco | texto ou nulo | A morada. |
identidade.empresa.telefone | texto ou nulo | O telefone. |
identidade.empresa.email | texto | O endereço de e-mail. |
identidade.empresa.website | texto ou nulo | |
identidade.empresa.temLogotipo | verdadeiro/falso | |
identidade.empresa.informacaoFactura | texto ou nulo | |
identidade.empresa.contasBancarias | lista de objectos | |
identidade.empresa.numeroCertificadoAgt | texto ou nulo | |
identidade.empresaGestora | verdadeiro/falso | |
identidade.rodapeDaMarca | objecto ou nulo | |
identidade.rodapeDaMarca.titulo | texto | |
identidade.rodapeDaMarca.mensagem | texto | |
identidade.rodapeDaMarca.site | texto | |
identidade.rodapeDaMarca.email | texto | O endereço de e-mail. |
identidade.rodapeDaMarca.telefone | texto | O telefone. |
identidade.rodapeDaMarca.pilares | lista de texto | |
identidade.rodapeDaMarca.comLogotipo | verdadeiro/falso | |
identidade.mostraRodapeDoPlano | verdadeiro/falso |
Erros específicos
NAO_ENCONTRADO — além dos gerais.
Pedido
curl 'https://<endereço-da-API>/api/estoque/saidas-manuais/<id>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/saidas-manuais#Regista uma saída de stock que não é uma venda, com o motivo.
O motivo é obrigatório: fica no histórico do artigo. A quantidade não pode exceder o saldo (erro STOCK_INSUFICIENTE). Aceita Idempotency-Key.
Corpo do pedido (JSON · RegistarSaidaManualEstoqueCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
produtoId | identificador (UUID) | sim | O artigo. |
armazemId | identificador (UUID) | sim | O armazém de onde saiu (ou para onde voltou) o stock. |
loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. | |
quantidade | número | sim | A quantidade. |
motivo | texto | sim |
Resposta
Devolve 201 com { "id": "…" }.
Erros específicos
STOCK_INSUFICIENTE · LOTE_EXPIRADO — além dos gerais.
Exemplo
Registar uma saída manual de stock (quebra, oferta, consumo interno)
curl -X POST 'https://<endereço-da-API>/api/estoque/saidas-manuais' \
-H 'Idempotency-Key: 90b47795-0678-4093-909f-de365a2371a0' \
-H 'X-Api-Key: assw_v1_<chave>' \
-H 'Content-Type: application/json' \
-d '{
"produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
"armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
"loteId": null,
"quantidade": 1,
"motivo": "Embalagem danificada"
}'
const resposta = await fetch('https://<endereço-da-API>/api/estoque/saidas-manuais', {
method: 'POST',
headers: {
"Idempotency-Key": "90b47795-0678-4093-909f-de365a2371a0",
"X-Api-Key": "assw_v1_<chave>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
"armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
"loteId": null,
"quantidade": 1,
"motivo": "Embalagem danificada"
}),
})
const dados = await resposta.json()
import requests
resposta = requests.post(
'https://<endereço-da-API>/api/estoque/saidas-manuais',
headers={
'Idempotency-Key': '90b47795-0678-4093-909f-de365a2371a0',
'X-Api-Key': 'assw_v1_<chave>',
'Content-Type': 'application/json'
},
json={
'produtoId': '01a12201-fa97-7f9b-8eec-2f731b91a53b',
'armazemId': '01a12201-f4d4-78a0-8dde-1efc41b94776',
'loteId': None,
'quantidade': 1,
'motivo': 'Embalagem danificada'
},
)
dados = resposta.json()
using var cliente = new HttpClient { BaseAddress = new Uri("https://<endereço-da-API>") };
using var pedido = new HttpRequestMessage(HttpMethod.Post, "/api/estoque/saidas-manuais");
pedido.Headers.Add("Idempotency-Key", "90b47795-0678-4093-909f-de365a2371a0");
pedido.Headers.Add("X-Api-Key", "assw_v1_<chave>");
pedido.Content = new StringContent("""
{
"produtoId": "01a12201-fa97-7f9b-8eec-2f731b91a53b",
"armazemId": "01a12201-f4d4-78a0-8dde-1efc41b94776",
"loteId": null,
"quantidade": 1,
"motivo": "Embalagem danificada"
}
""", Encoding.UTF8, "application/json");
using var resposta = await cliente.SendAsync(pedido);
var texto = await resposta.Content.ReadAsStringAsync();
201 Created Resposta
content-type: application/json; charset=utf-8
x-mucanda-api-version: 1
location: /api/estoque/saidas-manuais/01a12f69-9c62-7976-90b3-8f8e2d45911f
{
"id": "01a12f69-9c62-7976-90b3-8f8e2d45911f"
}
/api/estoque/armazens#Cria um armazém num estabelecimento.
Devolve o id. Cada estabelecimento já nasce com um armazém principal.
Corpo do pedido (JSON · CreateArmazemCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
descricao | texto | sim | A descrição. |
localizacao | texto | sim | Onde fica o armazém. |
lojaId | identificador (UUID) ou nulo | O estabelecimento. |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/armazens' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"descricao": "texto",
"localizacao": "texto"
}'
/api/estoque/armazens/{id}#Altera um armazém.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Corpo do pedido (JSON · UpdateArmazemRequest)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
descricao | texto | sim | A descrição. |
localizacao | texto | sim | Onde fica o armazém. |
Pedido
curl -X PUT 'https://<endereço-da-API>/api/estoque/armazens/<id>' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Content-Type: application/json' \
-d '{
"descricao": "texto",
"localizacao": "texto"
}'
/api/estoque/armazens/{id}/predefinir#Faz deste armazém o predefinido do estabelecimento (o que as vendas usam quando não se indica outro).
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/armazens/<id>/predefinir' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/armazens/{id}#Elimina um armazém.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X DELETE 'https://<endereço-da-API>/api/estoque/armazens/<id>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/lotes#Cria um lote (descrição e validade).
Devolve o id.
Corpo do pedido (JSON · CreateLoteCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
descricao | texto | sim | A descrição. |
validade | data e hora (ISO 8601) ou nulo | A data de validade do lote. |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/lotes' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"descricao": "texto"
}'
/api/estoque/lotes/{id}#Altera um lote.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Corpo do pedido (JSON · UpdateLoteRequest)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
descricao | texto | sim | A descrição. |
validade | data e hora (ISO 8601) ou nulo | A data de validade do lote. |
Pedido
curl -X PUT 'https://<endereço-da-API>/api/estoque/lotes/<id>' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Content-Type: application/json' \
-d '{
"descricao": "texto"
}'
/api/estoque/lotes/{id}#Elimina um lote.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X DELETE 'https://<endereço-da-API>/api/estoque/lotes/<id>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/saldos/retirar#Retira stock de um artigo, sempre o mais antigo primeiro (FIFO).
É a saída única e reaproveitável do stock: consome o saldo mais antigo primeiro, por lote.
Corpo do pedido (JSON · RetirarEstoqueFifoCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
produtoId | identificador (UUID) | sim | O artigo. |
armazemId | identificador (UUID) | sim | O armazém de onde saiu (ou para onde voltou) o stock. |
quantidade | número | sim | A quantidade. |
documento | texto ou nulo |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/saldos/retirar' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"produtoId": "00000000-0000-0000-0000-000000000000",
"armazemId": "00000000-0000-0000-0000-000000000000",
"quantidade": 0
}'
/api/estoque/entradas-manuais#Dá entrada de stock sem fornecedor nem factura (stock inicial, ajuste positivo de inventário).
Envie Idempotency-Key: repetir o pedido não o executa duas vezes. Ver Idempotência.
O que entrou consulta-se pelo extracto real do artigo (GET /api/estoque/saldos/historico/{produtoId}).
Corpo do pedido (JSON · RegistarEntradaManualEstoqueCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
produtoId | identificador (UUID) | sim | O artigo. |
armazemId | identificador (UUID) ou nulo | O armazém de onde saiu (ou para onde voltou) o stock. | |
loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. | |
quantidade | número | sim | A quantidade. |
observacao | texto ou nulo | O texto livre. |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/entradas-manuais' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"produtoId": "00000000-0000-0000-0000-000000000000",
"quantidade": 0
}'
/api/estoque/entradas/{id}/anexo#Anexa à entrada de stock a imagem ou o PDF do documento do fornecedor.
O corpo é um formulário multipart/form-data com o campo ficheiro. Uma imagem grande é reduzida pelo servidor.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/entradas/<id>/anexo' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/entradas/{id}/anexo#Descarrega o anexo de uma entrada de stock.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Resposta
Devolve 200 com o ficheiro anexado.
Pedido
curl 'https://<endereço-da-API>/api/estoque/entradas/<id>/anexo' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/entradas/{id}/anexo#Remove o anexo de uma entrada de stock.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X DELETE 'https://<endereço-da-API>/api/estoque/entradas/<id>/anexo' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias#Transfere stock de um armazém para outro.
Pode ficar pendente de confirmação (ver as transferências pendentes). Devolve o id.
Corpo do pedido (JSON · CreateTransferenciaEstoqueCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
armazemOrigemId | identificador (UUID) | sim | |
armazemDestinoId | identificador (UUID) | sim | |
autorizadoPor | texto ou nulo | ||
observacao | texto ou nulo | O texto livre. | |
itens | lista de objectos | sim | |
itens[].produtoId | identificador (UUID) | sim | O artigo. |
itens[].quantidade | número | sim | A quantidade. |
itens[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/transferencias' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"armazemOrigemId": "00000000-0000-0000-0000-000000000000",
"armazemDestinoId": "00000000-0000-0000-0000-000000000000",
"itens": [
{
"produtoId": "00000000-0000-0000-0000-000000000000",
"quantidade": 0
}
]
}'
/api/estoque/transferencias/recentes#As transferências mais recentes.
limite (por omissão 8).
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
limite | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].id | identificador (UUID) | Identificador único (UUID). |
[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
[].data | data e hora (ISO 8601) | A data e hora (UTC). |
[].armazemOrigemDescricao | texto | |
[].armazemDestinoDescricao | texto | |
[].autorizadoPor | texto | |
[].total | número | O total. |
[].lojaOrigemId | identificador (UUID) | |
[].lojaOrigemNome | texto | |
[].lojaDestinoId | identificador (UUID) | |
[].lojaDestinoNome | texto | |
[].estado | texto | O estado actual. |
[].numeroProdutos | número inteiro | |
[].dataResolucao | data e hora (ISO 8601) ou nulo | |
[].motivoRejeicao | texto ou nulo |
Pedido
curl 'https://<endereço-da-API>/api/estoque/transferencias/recentes' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias/produtos#Pesquisa de artigos com stock no armazém de origem, para preparar uma transferência.
armazemOrigemId obrigatório; filtro e tamanho (por omissão 30).
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
armazemOrigemId | na pesquisa | identificador (UUID) | sim |
filtro | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].id | identificador (UUID) | Identificador único (UUID). |
[].codigoInterno | texto ou nulo | O código interno do artigo. |
[].codigoBarra | texto ou nulo | O código de barras. |
[].nome | texto | O nome. |
[].unidade | texto ou nulo | |
[].controlarValidade | verdadeiro/falso | |
[].disponivel | número | |
[].usaLote | verdadeiro/falso |
Pedido
curl 'https://<endereço-da-API>/api/estoque/transferencias/produtos' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias/disponibilidade#O stock disponível no armazém de origem para uma lista de artigos.
armazemOrigemId e produtoIds (repetido) obrigatórios.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
armazemOrigemId | na pesquisa | identificador (UUID) | sim |
produtoIds | na pesquisa | lista de identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].produtoId | identificador (UUID) | O artigo. |
[].disponivel | número | |
[].lotes | lista de objectos | |
[].lotes[].loteId | identificador (UUID) | O lote, quando o artigo controla validade. |
[].lotes[].descricao | texto | A descrição. |
[].lotes[].validade | data e hora (ISO 8601) ou nulo | A data de validade do lote. |
[].lotes[].disponivel | número |
Pedido
curl 'https://<endereço-da-API>/api/estoque/transferencias/disponibilidade' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias/estoque-no-destino#O stock que uma lista de artigos já tem no armazém de destino.
armazemDestinoId e produtoIds (repetido) obrigatórios.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
armazemDestinoId | na pesquisa | identificador (UUID) | sim |
produtoIds | na pesquisa | lista de identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].produtoId | identificador (UUID) | O artigo. |
[].quantidade | número | A quantidade. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/transferencias/estoque-no-destino' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias/pendentes#As transferências à espera de confirmação.
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].id | identificador (UUID) | Identificador único (UUID). |
[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
[].data | data e hora (ISO 8601) | A data e hora (UTC). |
[].armazemOrigemDescricao | texto | |
[].armazemDestinoDescricao | texto | |
[].autorizadoPor | texto | |
[].total | número | O total. |
[].lojaOrigemId | identificador (UUID) | |
[].lojaOrigemNome | texto | |
[].lojaDestinoId | identificador (UUID) | |
[].lojaDestinoNome | texto | |
[].estado | texto | O estado actual. |
[].numeroProdutos | número inteiro | |
[].dataResolucao | data e hora (ISO 8601) ou nulo | |
[].motivoRejeicao | texto ou nulo |
Pedido
curl 'https://<endereço-da-API>/api/estoque/transferencias/pendentes' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias/{id}/confirmar#Confirma uma transferência: o stock passa para o destino.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/transferencias/<id>/confirmar' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias/{id}/rejeitar#Rejeita uma transferência (com um motivo, opcional): o stock fica na origem.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Corpo do pedido (JSON)
| Campo | Tipo | Obrigatório |
|---|---|---|
motivo | texto ou nulo |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/transferencias/<id>/rejeitar' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{}'
/api/estoque/transferencias/{id}#Uma transferência de stock, com as linhas.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
id | identificador (UUID) | Identificador único (UUID). |
numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
data | data e hora (ISO 8601) | A data e hora (UTC). |
armazemOrigemId | identificador (UUID) | |
armazemOrigemDescricao | texto | |
armazemDestinoId | identificador (UUID) | |
armazemDestinoDescricao | texto | |
autorizadoPor | texto | |
observacao | texto ou nulo | O texto livre. |
total | número | O total. |
lojaOrigemId | identificador (UUID) | |
lojaOrigemNome | texto | |
lojaDestinoId | identificador (UUID) | |
lojaDestinoNome | texto | |
estado | texto | O estado actual. |
dataResolucao | data e hora (ISO 8601) ou nulo | |
motivoRejeicao | texto ou nulo | |
itens | lista de objectos | |
itens[].produtoId | identificador (UUID) | O artigo. |
itens[].produtoNome | texto | |
itens[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
itens[].loteDescricao | texto ou nulo | O nome do lote. |
itens[].quantidade | número | A quantidade. |
itens[].precoUnitario | número | O preço de uma unidade, sem imposto. |
identidade | objecto ou nulo | |
identidade.empresa | objecto | |
identidade.empresa.nome | texto | O nome. |
identidade.empresa.numeroContribuinte | texto ou nulo | O número de contribuinte (NIF). |
identidade.empresa.endereco | texto ou nulo | A morada. |
identidade.empresa.telefone | texto ou nulo | O telefone. |
identidade.empresa.email | texto | O endereço de e-mail. |
identidade.empresa.website | texto ou nulo | |
identidade.empresa.temLogotipo | verdadeiro/falso | |
identidade.empresa.informacaoFactura | texto ou nulo | |
identidade.empresa.contasBancarias | lista de objectos | |
identidade.empresa.numeroCertificadoAgt | texto ou nulo | |
identidade.empresaGestora | verdadeiro/falso | |
identidade.rodapeDaMarca | objecto ou nulo | |
identidade.rodapeDaMarca.titulo | texto | |
identidade.rodapeDaMarca.mensagem | texto | |
identidade.rodapeDaMarca.site | texto | |
identidade.rodapeDaMarca.email | texto | O endereço de e-mail. |
identidade.rodapeDaMarca.telefone | texto | O telefone. |
identidade.rodapeDaMarca.pilares | lista de texto | |
identidade.rodapeDaMarca.comLogotipo | verdadeiro/falso | |
identidade.mostraRodapeDoPlano | verdadeiro/falso |
Pedido
curl 'https://<endereço-da-API>/api/estoque/transferencias/<id>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/transferencias#Lista as transferências de stock.
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
itens[].data | data e hora (ISO 8601) | A data e hora (UTC). |
itens[].armazemOrigemDescricao | texto | |
itens[].armazemDestinoDescricao | texto | |
itens[].autorizadoPor | texto | |
itens[].total | número | O total. |
itens[].lojaOrigemId | identificador (UUID) | |
itens[].lojaOrigemNome | texto | |
itens[].lojaDestinoId | identificador (UUID) | |
itens[].lojaDestinoNome | texto | |
itens[].estado | texto | O estado actual. |
itens[].numeroProdutos | número inteiro | |
itens[].dataResolucao | data e hora (ISO 8601) ou nulo | |
itens[].motivoRejeicao | texto ou nulo | |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/transferencias' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock#Cria um pedido de reserva de stock a um cliente, por um prazo.
Distinto das reservas entre estabelecimentos. Devolve o id.
Corpo do pedido (JSON · CriarPedidoReservaStockCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
clienteId | identificador (UUID) | sim | O cliente do documento. |
prazoMinutos | número inteiro ou nulo | ||
expiraEmUtc | data e hora (ISO 8601) ou nulo | ||
observacao | texto ou nulo | O texto livre. | |
itens | lista de objectos | sim | |
itens[].produtoId | identificador (UUID) | sim | O artigo. |
itens[].armazemId | identificador (UUID) | sim | O armazém de onde saiu (ou para onde voltou) o stock. |
itens[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. | |
itens[].quantidade | número | sim | A quantidade. |
lojaId | identificador (UUID) ou nulo | O estabelecimento. |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/reservas-stock' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"clienteId": "00000000-0000-0000-0000-000000000000",
"itens": [
{
"produtoId": "00000000-0000-0000-0000-000000000000",
"armazemId": "00000000-0000-0000-0000-000000000000",
"quantidade": 0
}
]
}'
/api/estoque/reservas-stock/activos#Os pedidos de reserva de stock activos.
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
itens[].clienteId | identificador (UUID) | O cliente do documento. |
itens[].clienteNome | texto | O nome do cliente tal como estava na emissão. |
itens[].criadoEmUtc | data e hora (ISO 8601) | Quando o evento aconteceu (UTC). |
itens[].expiraEmUtc | data e hora (ISO 8601) | |
itens[].observacao | texto ou nulo | O texto livre. |
itens[].linhas | lista de objectos | |
itens[].linhas[].id | identificador (UUID) | Identificador único (UUID). |
itens[].linhas[].produtoId | identificador (UUID) | O artigo. |
itens[].linhas[].produtoNome | texto | |
itens[].linhas[].unidade | texto ou nulo | |
itens[].linhas[].armazemId | identificador (UUID) | O armazém de onde saiu (ou para onde voltou) o stock. |
itens[].linhas[].armazemDescricao | texto | O nome do armazém. |
itens[].linhas[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
itens[].linhas[].loteDescricao | texto ou nulo | O nome do lote. |
itens[].linhas[].quantidade | número | A quantidade. |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas-stock/activos' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock/activos/resumo#Os totais de todas as reservas de stock activas.
Resposta (200 · JSON)
| Campo | Tipo |
|---|---|
pedidos | número inteiro |
reservas | número inteiro |
aExpirarEmBreve | número inteiro |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas-stock/activos/resumo' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock/cliente/{clienteId}#As reservas de stock activas de um cliente.
O ecrã de emissão mostra-as ao escolher o cliente, para a venda as cumprir.
A resposta é uma página: itens e proximoCursor. Ver Paginação.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
clienteId | no caminho | identificador (UUID) | sim |
cursor | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
itens | lista de objectos | Os registos desta página. |
itens[].id | identificador (UUID) | Identificador único (UUID). |
itens[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
itens[].clienteId | identificador (UUID) | O cliente do documento. |
itens[].clienteNome | texto | O nome do cliente tal como estava na emissão. |
itens[].criadoEmUtc | data e hora (ISO 8601) | Quando o evento aconteceu (UTC). |
itens[].expiraEmUtc | data e hora (ISO 8601) | |
itens[].observacao | texto ou nulo | O texto livre. |
itens[].linhas | lista de objectos | |
itens[].linhas[].id | identificador (UUID) | Identificador único (UUID). |
itens[].linhas[].produtoId | identificador (UUID) | O artigo. |
itens[].linhas[].produtoNome | texto | |
itens[].linhas[].unidade | texto ou nulo | |
itens[].linhas[].armazemId | identificador (UUID) | O armazém de onde saiu (ou para onde voltou) o stock. |
itens[].linhas[].armazemDescricao | texto | O nome do armazém. |
itens[].linhas[].loteId | identificador (UUID) ou nulo | O lote, quando o artigo controla validade. |
itens[].linhas[].loteDescricao | texto ou nulo | O nome do lote. |
itens[].linhas[].quantidade | número | A quantidade. |
proximoCursor | texto ou nulo | O cursor da página seguinte; nulo quando não há mais. Ver Paginação. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas-stock/cliente/<clienteId>' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock/historico#O histórico dos pedidos de reserva de stock.
limite (por omissão 12).
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
limite | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].linhaId | identificador (UUID) | |
[].pedidoId | identificador (UUID) | |
[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
[].clienteNome | texto | O nome do cliente tal como estava na emissão. |
[].produtoNome | texto | |
[].unidade | texto ou nulo | |
[].armazemDescricao | texto | O nome do armazém. |
[].loteDescricao | texto ou nulo | O nome do lote. |
[].quantidade | número | A quantidade. |
[].criadoEmUtc | data e hora (ISO 8601) | Quando o evento aconteceu (UTC). |
[].estado | texto | O estado actual. |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas-stock/historico' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock/produtos#Pesquisa de artigos para reservar, com o stock de um armazém.
armazemId obrigatório; filtro e tamanho (por omissão 30).
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
armazemId | na pesquisa | identificador (UUID) | sim |
filtro | na pesquisa | texto | |
tamanho | na pesquisa | número inteiro |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].id | identificador (UUID) | Identificador único (UUID). |
[].codigoInterno | texto ou nulo | O código interno do artigo. |
[].codigoBarra | texto ou nulo | O código de barras. |
[].nome | texto | O nome. |
[].unidade | texto ou nulo | |
[].controlarValidade | verdadeiro/falso | |
[].disponivel | número | |
[].usaLote | verdadeiro/falso |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas-stock/produtos' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock/disponibilidade#O stock disponível para reservar, de uma lista de artigos num armazém.
armazemId e produtoIds (repetido) obrigatórios.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
armazemId | na pesquisa | identificador (UUID) | sim |
produtoIds | na pesquisa | lista de identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].produtoId | identificador (UUID) | O artigo. |
[].disponivel | número | |
[].lotes | lista de objectos | |
[].lotes[].loteId | identificador (UUID) | O lote, quando o artigo controla validade. |
[].lotes[].descricao | texto | A descrição. |
[].lotes[].validade | data e hora (ISO 8601) ou nulo | A data de validade do lote. |
[].lotes[].disponivel | número |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas-stock/disponibilidade' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock/{id}/linhas/{linhaId}/confirmar#Confirma uma linha de um pedido de reserva: o stock fica reservado.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
linhaId | no caminho | identificador (UUID) | sim |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/reservas-stock/<id>/linhas/<linhaId>/confirmar' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas-stock/{id}/prorrogar#Prorroga o prazo de um pedido de reserva de stock.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Corpo do pedido (JSON · ProrrogarReservaStockRequest)
| Campo | Tipo | Obrigatório |
|---|---|---|
prazoMinutos | número inteiro ou nulo | |
expiraEmUtc | data e hora (ISO 8601) ou nulo |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/reservas-stock/<id>/prorrogar' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{}'
/api/estoque/reservas-stock/{id}/cancelar#Cancela um pedido de reserva de stock (com um motivo, opcional): o stock volta a ficar livre.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Corpo do pedido (JSON)
| Campo | Tipo | Obrigatório |
|---|---|---|
motivo | texto ou nulo |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/reservas-stock/<id>/cancelar' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{}'
/api/estoque/reservas/disponibilidade#Onde um artigo tem stock disponível, em toda a empresa.
produtoId obrigatório. Serve para pedir stock a outro estabelecimento.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
produtoId | na pesquisa | identificador (UUID) | sim |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].lojaId | identificador (UUID) | O estabelecimento. |
[].lojaNome | texto | |
[].lojaCodigo | texto | |
[].armazemId | identificador (UUID) | O armazém de onde saiu (ou para onde voltou) o stock. |
[].armazemDescricao | texto | O nome do armazém. |
[].quantidadeDisponivel | número |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas/disponibilidade' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas#Lista as reservas de stock entre estabelecimentos.
lojaId e estado filtram.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
lojaId | na pesquisa | identificador (UUID) | |
estado | na pesquisa | texto |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].id | identificador (UUID) | Identificador único (UUID). |
[].produtoId | identificador (UUID) | O artigo. |
[].produtoNome | texto | |
[].armazemOrigemId | identificador (UUID) | |
[].armazemOrigemDescricao | texto | |
[].lojaOrigemId | identificador (UUID) | |
[].lojaOrigemNome | texto | |
[].armazemDestinoId | identificador (UUID) | |
[].armazemDestinoDescricao | texto | |
[].lojaDestinoId | identificador (UUID) | |
[].lojaDestinoNome | texto | |
[].quantidade | número | A quantidade. |
[].estado | texto | O estado actual. |
[].usuarioSolicitanteId | identificador (UUID) | |
[].usuarioConfirmadorId | identificador (UUID) ou nulo | |
[].criadaEmUtc | data e hora (ISO 8601) | |
[].expiraEmUtc | data e hora (ISO 8601) | |
[].resolvidaEmUtc | data e hora (ISO 8601) ou nulo | |
[].observacao | texto ou nulo | O texto livre. |
[].motivoRecusa | texto ou nulo | |
[].transferenciaEstoqueId | identificador (UUID) ou nulo | |
[].clienteId | identificador (UUID) ou nulo | O cliente do documento. |
[].clienteNome | texto ou nulo | O nome do cliente tal como estava na emissão. |
[].clienteTelefone | texto ou nulo |
Pedido
curl 'https://<endereço-da-API>/api/estoque/reservas' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas#Pede stock a outro estabelecimento (uma reserva entre estabelecimentos).
Precisa de confirmação do estabelecimento de origem. Devolve o id.
Corpo do pedido (JSON · SolicitarReservaEstoqueCommand)
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
produtoId | identificador (UUID) | sim | O artigo. |
armazemOrigemId | identificador (UUID) | sim | |
armazemDestinoId | identificador (UUID) | sim | |
quantidade | número | sim | A quantidade. |
observacao | texto ou nulo | O texto livre. | |
lojaDestinoId | identificador (UUID) ou nulo | ||
clienteId | identificador (UUID) ou nulo | O cliente do documento. |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/reservas' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{
"produtoId": "00000000-0000-0000-0000-000000000000",
"armazemOrigemId": "00000000-0000-0000-0000-000000000000",
"armazemDestinoId": "00000000-0000-0000-0000-000000000000",
"quantidade": 0
}'
/api/estoque/reservas/{id}/confirmar#O estabelecimento de origem confirma uma reserva de stock.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/reservas/<id>/confirmar' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/reservas/{id}/recusar#O estabelecimento de origem recusa uma reserva de stock (com um motivo, opcional).
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Corpo do pedido (JSON)
| Campo | Tipo | Obrigatório |
|---|---|---|
motivo | texto ou nulo |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/reservas/<id>/recusar' \
-H 'X-Api-Key: <a-sua-chave>' \
-H 'Idempotency-Key: <um-GUID-novo>' \
-H 'Content-Type: application/json' \
-d '{}'
/api/estoque/guias-transferencia#As guias de transferência interna: o documento interno que acompanha cada transferência.
Emitem-se sozinhas ao confirmar a transferência; não há um pedido para as criar. lojaId filtra.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
lojaId | na pesquisa | identificador (UUID) |
Resposta (200 · JSON)
| Campo | Tipo | Significado |
|---|---|---|
[].id | identificador (UUID) | Identificador único (UUID). |
[].produtoId | identificador (UUID) ou nulo | O artigo. |
[].produtoNome | texto ou nulo | |
[].quantidade | número | A quantidade. |
[].lojaOrigemId | identificador (UUID) | |
[].lojaOrigemNome | texto | |
[].lojaDestinoId | identificador (UUID) | |
[].lojaDestinoNome | texto | |
[].numero | texto | O número legível, atribuído pelo servidor («FR LC2026/25»). |
[].data | data e hora (ISO 8601) | A data e hora (UTC). |
[].estado | texto | O estado actual. |
[].usuarioAutorizadorId | identificador (UUID) | |
[].usuarioReceptorId | identificador (UUID) ou nulo | |
[].dataRecepcao | data e hora (ISO 8601) ou nulo | |
[].hash | texto | A assinatura digital do documento (em Base64). |
[].hashControlo | texto | Os 4 caracteres da assinatura que se imprimem no documento. |
[].transferenciaEstoqueId | identificador (UUID) | |
[].reservaEstoqueId | identificador (UUID) ou nulo |
Pedido
curl 'https://<endereço-da-API>/api/estoque/guias-transferencia' \
-H 'X-Api-Key: <a-sua-chave>'
/api/estoque/guias-transferencia/{id}/confirmar-recepcao#Confirma a recepção da mercadoria de uma guia de transferência interna.
Parâmetros
| Nome | Onde | Tipo | Obrigatório |
|---|---|---|---|
id | no caminho | identificador (UUID) | sim |
Pedido
curl -X POST 'https://<endereço-da-API>/api/estoque/guias-transferencia/<id>/confirmar-recepcao' \
-H 'X-Api-Key: <a-sua-chave>'