Documentação da API de facturação
Ligue a sua aplicação ao DS Facto. Consulte o guia de integração, os campos aceites, as regras de facturação e os exemplos de cada operação.
1. Começar a integrar a facturação
A API REST v1 permite ligar a sua loja, aplicação ou sistema de gestão ao DS Facto: criar clientes e artigos, emitir documentos, consultar pagamentos registados através dos recibos e descarregar PDFs.
- Crie a empresa no DS Facto e active um plano. A API está incluída nos três planos, respeitando os limites de documentos e funcionalidades de cada um. A avaliação gratuita é exclusiva do Essencial.
- Configure os dados fiscais e as séries em utilização. Confirme o estabelecimento e, quando precisar de movimentar produtos, o armazém.
- No painel, abra Integrações → API REST e crie uma chave com as permissões necessárias e uma data de validade.
- Faça os primeiros testes numa empresa configurada em modo de teste. Confira clientes, valores, documentos e PDFs antes da utilização fiscal.
https://dsfacto.com/api/v1O modo de teste ou de produção depende da configuração fiscal da empresa. Não existe um parâmetro sandbox para mudar esse modo por pedido. Documentos de teste não têm validade fiscal. A certificação AGT permanece pendente; a emissão em produção está sujeita às aprovações e configurações fiscais exigidas pelo sistema.
2. Autenticação e permissões
Envie a chave em todos os pedidos. Ela começa por ds_ e só é apresentada integralmente no momento da criação.
Authorization: Bearer ds_SUA_CHAVE
Content-Type: application/jsonGuarde a chave no servidor da sua integração. Não a coloque no código público do site, aplicações distribuídas ou repositórios. Se for exposta, revogue-a no painel e crie outra.
A chave fica limitada à empresa, às permissões do utilizador que a criou e, se definido, a um estabelecimento. Uma subscrição inactiva, chave expirada ou revogada impede o acesso. Não envie identificadores de outra empresa para tentar mudar o âmbito do pedido.
Para emitir facturas, autorize documents.create e documents.read. Para recibos, autorize receipts.create e documents.read. As restantes permissões estão indicadas em cada operação.
3. Primeiro pedido e exemplo em JavaScript
Defina DS_API_KEY com a sua chave no ambiente privado onde executa os exemplos. Comece por uma consulta que não cria documentos:
curl 'https://dsfacto.com/api/v1/customers?page=1&pageSize=50' \
-H "Authorization: Bearer $DS_API_KEY"Exemplo de criação de cliente em JavaScript, executado no servidor:
const response = await fetch('https://dsfacto.com/api/v1/customers', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.DS_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
"nome": "Cliente de Exemplo",
"nif": "5000000001",
"email": "cliente@example.com",
"telefone": "923456789",
"morada": "Luanda, Angola"
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error || 'Não foi possível criar o cliente.');
const clienteId = result.data.id;Guarde o id devolvido em data e utilize-o em clienteId na factura. Os identificadores e números mostrados nesta página são ilustrativos. As respostas de exemplo são extractos; os registos podem incluir outros campos gerados pelo sistema.
4. Referência das operações
Estão disponíveis as operações abaixo. A versão actual disponibiliza consultas e criação/emissão; não oferece alterações, anulações ou eliminação por PUT, PATCH ou DELETE nestes endereços.
GET/customersListar clientes
/customersConsulte os clientes da empresa. Use search para pesquisar pelo nome.
Permissões: customers.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
page | query | Não |
pageSize | query | Não |
start | query | Não |
end | query | Não |
search | query | Não |
Exemplo de pedido
curl 'https://dsfacto.com/api/v1/customers' \
-H "Authorization: Bearer $DS_API_KEY"Resposta de sucesso — 200 OK
{
"data": [
{
"id": "11111111-1111-4111-8111-111111111111",
"nome": "Cliente de Exemplo",
"nif": "5000000001"
}
],
"total": 1,
"page": 1,
"pageSize": 50
}POST/customersCriar cliente
/customersRegiste um cliente para emitir documentos em seu nome. O nome e o NIF são obrigatórios.
Permissões: customers.manage.
Campos aceites no corpo JSON
| Campo | Formato | Utilização |
|---|---|---|
nome | string | Obrigatório. Mínimo: 2 caracteres. Máximo: 255 caracteres. |
nif | string | Obrigatório. Mínimo: 8 caracteres. Máximo: 20 caracteres. |
email | Opcional; pode depender do tipo de documento. | |
telefone | string | Opcional; pode depender do tipo de documento. Máximo: 50 caracteres. |
morada | string | Opcional; pode depender do tipo de documento. Máximo: 1000 caracteres. |
Exemplo de pedido
curl -X POST 'https://dsfacto.com/api/v1/customers' \
-H "Authorization: Bearer $DS_API_KEY" \
-H 'Content-Type: application/json' \
--data '{
"nome": "Cliente de Exemplo",
"nif": "5000000001",
"email": "cliente@example.com",
"telefone": "923456789",
"morada": "Luanda, Angola"
}'Resposta de sucesso — 201 Created
{
"data": {
"id": "11111111-1111-4111-8111-111111111111",
"nome": "Cliente de Exemplo",
"nif": "5000000001"
}
}GET/productsListar artigos e serviços
/productsConsulte o catálogo. Use search para pesquisar pela descrição.
Permissões: products.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
page | query | Não |
pageSize | query | Não |
start | query | Não |
end | query | Não |
search | query | Não |
Exemplo de pedido
curl 'https://dsfacto.com/api/v1/products' \
-H "Authorization: Bearer $DS_API_KEY"Resposta de sucesso — 200 OK
{
"data": [],
"total": 0,
"page": 1,
"pageSize": 50
}POST/productsCriar artigo ou serviço
/productsRegiste código, descrição, preço, IVA e tipo. Neste pedido, os nomes compostos usam sublinhado: preco_unitario, taxa_iva e motivo_isencao.
Permissões: products.manage.
Campos aceites no corpo JSON
| Campo | Formato | Utilização |
|---|---|---|
codigo | string | Obrigatório. |
descricao | string | Obrigatório. |
preco_unitario | number | Obrigatório. |
taxa_iva | number | Obrigatório. |
tipo | string | Obrigatório. Valores: produto, servico. |
unidade | string | Opcional; pode depender do tipo de documento. |
motivo_isencao | string / null | Opcional; pode depender do tipo de documento. Motivo de isenção quando a taxa de IVA é 0. |
stock_inicial | number | Opcional; pode depender do tipo de documento. Por omissão: 0. Mínimo: 0. |
armazem_id | uuid | Opcional; pode depender do tipo de documento. |
Exemplo de pedido
curl -X POST 'https://dsfacto.com/api/v1/products' \
-H "Authorization: Bearer $DS_API_KEY" \
-H 'Content-Type: application/json' \
--data '{
"codigo": "SERV-001",
"descricao": "Serviço de consultoria",
"preco_unitario": 1000,
"taxa_iva": 14,
"tipo": "servico",
"unidade": "Hora"
}'Resposta de sucesso — 201 Created
{
"data": {
"id": "33333333-3333-4333-8333-333333333333",
"codigo": "SERV-001",
"descricao": "Serviço de consultoria",
"preco_unitario": 1000,
"taxa_iva": 14,
"tipo": "servico",
"unidade": "Hora"
}
}GET/invoicesListar documentos
/invoicesListe os documentos de facturação, incluindo recibos. Pode filtrar por datas, cliente, tipo, estado, série, operador e estabelecimento.
Permissões: documents.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
page | query | Não |
pageSize | query | Não |
start | query | Não |
end | query | Não |
clienteId | query | Não |
tipo | query | Não |
estado | query | Não |
serieId | query | Não |
operadorId | query | Não |
estabelecimentoId | query | Não |
Exemplo de pedido
curl 'https://dsfacto.com/api/v1/invoices' \
-H "Authorization: Bearer $DS_API_KEY"Resposta de sucesso — 200 OK
{
"data": [
{
"id": "22222222-2222-4222-8222-222222222222",
"tipo": "FT",
"numero": "FT A/1",
"total_pagar": 1140
}
],
"total": 1,
"page": 1,
"pageSize": 50
}POST/invoicesEmitir documento
/invoicesEmita facturas e os outros documentos indicados nas regras fiscais abaixo. A numeração, o IVA e os totais são calculados pelo sistema. Envie Idempotency-Key.
Permissões: documents.create + documents.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
Idempotency-Key | header | Sim |
Campos aceites no corpo JSON
| Campo | Formato | Utilização |
|---|---|---|
tipo | string | Opcional; pode depender do tipo de documento. Valores: FT, FR, FP, GT, NC, ND, RC, AF, FG. |
clienteId | string | Obrigatório. |
serieId | uuid | Opcional; pode depender do tipo de documento. |
serie | string | Opcional; pode depender do tipo de documento. Nome de uma série existente, quando serieId é omitido. Máximo: 20 caracteres. |
estabelecimentoId | uuid | Opcional; pode depender do tipo de documento. |
armazemId | uuid | Opcional; pode depender do tipo de documento. |
dataEmissao | date | Opcional; pode depender do tipo de documento. |
dataVencimento | date | Opcional; pode depender do tipo de documento. |
referenciaId | uuid | Opcional; pode depender do tipo de documento. |
motivo | string | Opcional; pode depender do tipo de documento. |
clienteManual | object | Opcional; pode depender do tipo de documento. |
aplicarRetencao | boolean | Opcional; pode depender do tipo de documento. Por omissão: false. |
retencaoTaxa | number | Opcional; pode depender do tipo de documento. 0 desactiva; 6.5 aplica retenção aos serviços. Outras taxas exigem Profissional. Mínimo: 0. Máximo: 100. |
tipoRetencao | string | Opcional; pode depender do tipo de documento. Valores: II, IRT, IS, IVA, IP, IAC, OU. |
fundamentoRetencao | string | Opcional; pode depender do tipo de documento. Obrigatório quando há retenção. Máximo: 1000 caracteres. |
meioPagamento | string | Opcional; pode depender do tipo de documento. Obrigatório na factura-recibo (FR). |
observacoes | string | Opcional; pode depender do tipo de documento. Máximo: 5000 caracteres. |
rascunho | boolean | Opcional; pode depender do tipo de documento. Por omissão: false. |
devolverStock | boolean | Opcional; pode depender do tipo de documento. Indica devolução de stock quando aplicável à correcção. Por omissão: false. |
transporte | object | Opcional; pode depender do tipo de documento. Obrigatório para emitir uma guia de transporte (GT). |
moeda | string | Opcional; pode depender do tipo de documento. Valores: AOA, USD, EUR, GBP, ZAR, MZN. Por omissão: AOA. |
taxaCambio | number | Opcional; pode depender do tipo de documento. AOA por unidade de divisa. Os preços das linhas e o livro permanecem em AOA. |
fonteCambio | string | Opcional; pode depender do tipo de documento. Mínimo: 10 caracteres. |
autofacturacao | object | Opcional; pode depender do tipo de documento. |
origensGlobais | array | Opcional; pode depender do tipo de documento. Guias de transporte da mesma empresa, cliente e estabelecimento. As linhas são reconstruídas no servidor. |
alocacoes | array | Opcional; pode depender do tipo de documento. |
linhas | array | Opcional; pode depender do tipo de documento. Obrigatórias nas emissões normais. Na factura global, são obtidas das guias. No recibo, são geradas a partir das alocações. |
Exemplo de pedido
curl -X POST 'https://dsfacto.com/api/v1/invoices' \
-H "Authorization: Bearer $DS_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: factura-pedido-0001' \
--data '{
"tipo": "FT",
"clienteId": "11111111-1111-4111-8111-111111111111",
"linhas": [
{
"descricao": "Serviço de consultoria",
"tipo": "servico",
"quantidade": 1,
"precoUnitario": 1000,
"taxaIva": 14
}
]
}'Resposta de sucesso — 201 Created
{
"data": {
"id": "22222222-2222-4222-8222-222222222222",
"tipo": "FT",
"numero": "FT A/1",
"total_pagar": 1140
}
}GET/invoices/{id}Consultar documento
/invoices/{id}Consulte um documento pelo seu identificador. Inclui as linhas e, quando existirem, referências a outros documentos e alocações de recibos.
Permissões: documents.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
id | path | Sim |
Exemplo de pedido
curl 'https://dsfacto.com/api/v1/invoices/22222222-2222-4222-8222-222222222222' \
-H "Authorization: Bearer $DS_API_KEY"Resposta de sucesso — 200 OK
{
"data": {
"id": "22222222-2222-4222-8222-222222222222",
"tipo": "FT",
"numero": "FT A/1",
"total_pagar": 1140,
"linhas": [
{
"descricao": "Serviço de consultoria",
"quantidade": 1,
"preco_unitario": 1000,
"taxa_iva": 14
}
]
}
}GET/invoices/{id}/pdfDescarregar PDF
/invoices/{id}/pdfObtenha o ficheiro do documento. A resposta é um PDF, não um objecto JSON.
Permissões: documents.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
id | path | Sim |
Exemplo de pedido
curl 'https://dsfacto.com/api/v1/invoices/22222222-2222-4222-8222-222222222222/pdf' \
-H "Authorization: Bearer $DS_API_KEY" \
--output documento.pdfResposta de sucesso — 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="documento.pdf"POST/receiptsEmitir recibo
/receiptsRegiste a liquidação total ou parcial de uma ou mais facturas do mesmo cliente. Envie as alocações e Idempotency-Key; não envie linhas nem totais calculados.
Permissões: receipts.create + documents.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
Idempotency-Key | header | Sim |
Campos aceites no corpo JSON
| Campo | Formato | Utilização |
|---|---|---|
clienteId | uuid | Obrigatório. |
estabelecimentoId | uuid | Opcional; pode depender do tipo de documento. |
serieId | uuid | Opcional; pode depender do tipo de documento. |
meioPagamento | string | Opcional; pode depender do tipo de documento. |
alocacoes | array | Obrigatório. |
Exemplo de pedido
curl -X POST 'https://dsfacto.com/api/v1/receipts' \
-H "Authorization: Bearer $DS_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: recibo-pedido-0001' \
--data '{
"clienteId": "11111111-1111-4111-8111-111111111111",
"meioPagamento": "Transferência bancária",
"alocacoes": [
{
"facturaId": "22222222-2222-4222-8222-222222222222",
"montante": 1140
}
]
}'Resposta de sucesso — 201 Created
{
"data": {
"id": "44444444-4444-4444-8444-444444444444",
"tipo": "RC",
"numero": "RC A/1",
"total_pagar": 1140
}
}GET/stockConsultar stock
/stockConsulte as quantidades dos artigos por armazém. A resposta inclui a identificação do artigo e do armazém. Não existe operação de escrita de stock nesta API v1.
Permissões: inventory.read.
| Parâmetro | Local | Obrigatório |
|---|---|---|
page | query | Não |
pageSize | query | Não |
start | query | Não |
end | query | Não |
Exemplo de pedido
curl 'https://dsfacto.com/api/v1/stock' \
-H "Authorization: Bearer $DS_API_KEY"Resposta de sucesso — 200 OK
{
"data": [
{
"artigo_id": "33333333-3333-4333-8333-333333333333",
"armazem_id": "55555555-5555-4555-8555-555555555555",
"quantidade": 25,
"artigo": {
"codigo": "PROD-001",
"descricao": "Produto de exemplo"
},
"armazem": {
"nome": "Principal",
"estabelecimento_id": "66666666-6666-4666-8666-666666666666"
}
}
],
"total": 1,
"page": 1,
"pageSize": 50
}GET/openapiConsultar especificação
/openapiObtenha a descrição OpenAPI 3.1 em JSON com uma chave válida. A mesma especificação também pode ser descarregada publicamente nesta documentação.
Permissões: documents.read.
Exemplo de pedido
curl 'https://dsfacto.com/api/v1/openapi' \
-H "Authorization: Bearer $DS_API_KEY"Resposta de sucesso — 200 OK
{
"openapi": "3.1.0",
"info": {
"title": "DS Facto API",
"version": "1.0.0"
}
}5. Linhas e nomes dos campos
Na emissão, envie linhas com os itens facturados. Cada linha deve conter descrição, quantidade positiva, preço unitário não negativo e taxa de IVA. Uma emissão normal exige pelo menos uma linha e aceita até 500.
| Campo | Formato | Utilização |
|---|---|---|
artigoId | uuid | Opcional; pode depender do tipo de documento. |
descricao | string | Obrigatório. Mínimo: 1 caracteres. Máximo: 1000 caracteres. |
quantidade | number | Obrigatório. |
precoUnitario | number | Obrigatório. Mínimo: 0. |
taxaIva | number | Obrigatório. Valores: 0, 5, 7, 14. |
desconto | number | Opcional; pode depender do tipo de documento. Mínimo: 0. Máximo: 100. |
motivoIsencao | string | Opcional; pode depender do tipo de documento. |
tipo | string | Opcional; pode depender do tipo de documento. Necessário para aplicar retenção apenas aos serviços quando não é enviado artigoId. Valores: produto, servico. |
unidade | string | Opcional; pode depender do tipo de documento. Máximo: 30 caracteres. |
codigo | string | Opcional; pode depender do tipo de documento. Máximo: 50 caracteres. |
As taxas de IVA aceites são 0, 5, 7 e 14. A taxa 0 exige um motivoIsencao válido. O desconto é uma percentagem entre 0 e 100. O sistema calcula os impostos e os totais; não envie um total final para substituir esse cálculo.
Os pedidos de artigos usam preco_unitario e taxa_iva. As linhas de documentos usam precoUnitario e taxaIva. As respostas dos registos podem voltar a usar nomes com sublinhado. Campos não reconhecidos nos pedidos de criação são rejeitados.
6. Regras de facturação e casos especiais
| Tipo | Documento | Requisitos adicionais |
|---|---|---|
| FT | Factura | Cliente e linhas. O vencimento pode ser enviado em dataVencimento. |
| FR | Factura-Recibo | Cliente, linhas e meioPagamento obrigatório. |
| FP | Pró-Forma | Proposta ao cliente. Não comprova pagamento. |
| GT | Guia de Transporte | Linhas e transporte: matricula, localCarga, localDescarga e inicio com fuso horário. |
| NC / ND | Nota de Crédito / Débito | referenciaId do documento original e motivo da correcção obrigatórios. |
| RC | Recibo | Use POST /receipts com alocacoes. Não pode liquidar mais do que o saldo em dívida. |
| AF | Autofacturação | Exige autofacturacao.cadastroConfirmado=true e evidencia com pelo menos 20 caracteres. Em produção, o perfil precisa de aprovação. |
| FG | Factura Global | Envie origensGlobais com guias distintas do mesmo cliente e estabelecimento. As linhas são obtidas dessas guias. |
Cliente: utilize o identificador de um cliente da empresa. Para os documentos em que seja permitido, pode usar CONSUMIDOR_FINAL. O recibo exige um cliente registado. clienteManual permite indicar nome, NIF e morada quando aplicável.
Datas: use AAAA-MM-DD. Na emissão definitiva, dataEmissao tem de corresponder ao dia actual em Angola; ao omitir o campo, o sistema escolhe essa data. O início do transporte usa data e hora com fuso horário, como 2026-10-27T10:00:00+01:00, substituindo pela data efectiva da operação.
Série e estabelecimento: pode enviar serieId e estabelecimentoId obtidos no painel. Quando omitidos, o sistema procura as opções adequadas à empresa e ao documento. Confirme-as antes de automatizar emissões. A chave não permite aceder a estabelecimentos fora do seu âmbito.
Produtos e stock: artigos com controlo de stock precisam de armazém autorizado e de quantidade disponível quando a operação implica saída de mercadoria. Serviços não movimentam stock. Não envie um armazém quando a operação não o exige.
Retenção: retencaoTaxa: 0 desactiva-a; 6.5 aplica a retenção apenas aos serviços líquidos. Identifique as linhas como tipo: "servico", ou use um artigo registado como serviço. Indique fundamentoRetencao e um tipoRetencao válido ou previamente configurado. Outras taxas e alterações do tipo configurado exigem o Profissional. O enquadramento fiscal deve ser confirmado com a contabilidade.
Moeda: a facturação e os preços das linhas são calculados em AOA. Para apresentar contravalor, são aceites AOA, USD, EUR, GBP, ZAR e MZN em moeda, com taxaCambio positiva em AOA por unidade de divisa e fonteCambio documentada. Recibos liquidam em AOA.
Rascunhos: rascunho: true guarda um documento sem emissão definitiva. Não o apresente como factura emitida. No pedido de recibo, as linhas de quitação são preparadas pelo sistema a partir das alocações.
7. Paginação, pesquisa e filtros
| Parâmetro | Aplicação | Comportamento |
|---|---|---|
| page | Listas | Começa em 1; máximo 100000. |
| pageSize | Listas | Por omissão 50; entre 1 e 500. |
| search | Clientes e artigos | Pesquisa parcial no nome ou na descrição. |
| start / end | Listas | Intervalo de datas inclusivo. Nos documentos, filtra a data de emissão; nas outras listas, a data de criação do registo. |
| clienteId, tipo, estado, serieId, operadorId | Documentos | Filtram o campo correspondente. |
| estabelecimentoId | Documentos | Restringe ao estabelecimento autorizado indicado. |
https://dsfacto.com/api/v1/invoices?page=1&pageSize=50&tipo=FT&start=2026-10-01&end=2026-10-31As listas devolvem data, total, page e pageSize. Continue até recolher o número de registos indicado em total. Consultas de um documento, PDFs e a especificação OpenAPI não usam paginação.
O limite é de 120 pedidos por minuto por chave. Se receber 429, respeite Retry-After antes de voltar a pedir. Distribua as consultas ao longo do tempo em vez de executar todos os pedidos em simultâneo.
8. Repetir uma emissão sem duplicar documentos
Em POST /invoices e POST /receipts, envie Idempotency-Key com 8 a 150 caracteres. São permitidos letras, números, dois pontos, sublinhado e hífen.
Idempotency-Key: factura-encomenda-0001- Crie uma chave estável para cada emissão da sua encomenda ou pagamento.
- Se houver uma falha de ligação ou não receber resposta, repita com a mesma chave e exactamente os mesmos dados.
- O sistema devolve a emissão já registada em vez de criar outra. Reutilizar a chave com dados diferentes causa conflito.
- Use uma chave nova apenas para uma operação realmente nova. Clientes e artigos não têm esta garantia de repetição.
9. Respostas, erros e recuperação
Criações devolvem 201, com o registo em data; consultas devolvem 200. O PDF devolve o ficheiro directamente. Um erro é devolvido em JSON, com error e, quando aplicável, code ou details.
{
"sucesso": false,
"error": "A subscrição da empresa está inactiva. Consulte a área de subscrição.",
"code": "SUBSCRIPTION_INACTIVE"
}| HTTP | Significado | Como resolver |
|---|---|---|
| 400 | Dados ou regra de facturação inválidos | Confira os campos, os dados fiscais e a mensagem devolvida. |
| 401 | Chave ausente, inválida, revogada ou expirada | Confira o cabeçalho Authorization e a validade da chave. |
| 403 | Plano, empresa, estabelecimento ou permissão não autorizados | Active um plano e reveja as permissões da chave e do seu criador. |
| 404 | Documento ou endereço não encontrado | Confirme o endereço e o identificador do documento. |
| 405 | Método não permitido | Use apenas a operação GET ou POST documentada. |
| 409 | Conflito, emissão ocupada ou aprovação pendente | Reveja a mensagem; para repetir a mesma emissão, preserve corpo e Idempotency-Key. |
| 415 | Formato de pedido incorrecto | Envie Content-Type: application/json. |
| 429 | Limite de pedidos atingido | Aguarde o período indicado em Retry-After. |
| 500 / 503 | Não foi possível concluir o pedido | Tente mais tarde. Em emissões, preserve a chave de idempotência; se persistir, contacte o suporte. |
Os corpos dos pedidos aceitam até 2 MB. Pedidos que ultrapassem esse limite devolvem 413. Não repita automaticamente um erro de dados ou de permissão sem corrigir a causa.
10. Preparar a integração para utilização
- Confirme o plano activo, as permissões e a validade da chave.
- Teste a emissão, os valores de IVA e retenção, as correcções, os recibos parciais e os PDFs que vai utilizar.
- Teste a repetição do mesmo pedido e os erros de autenticação, dados e limite de pedidos.
- Guarde a ligação entre cada encomenda da sua aplicação, a chave de idempotência e o documento devolvido.
- Confirme com a contabilidade os dados da empresa, séries, isenções e restantes requisitos fiscais antes da utilização em produção.
Precisa de ajuda? Contacte suporte@dsfacto.com com o endereço da operação, data, estado HTTP e mensagem de erro. Não envie a chave secreta nem dados desnecessários dos seus clientes.
