Nordlet

← Documentacao / Guias

Primeiros passos

Chaves de API, primeiras chamadas, o ciclo de faturação completo, SDKs e webhooks.

O Nordlet é uma plataforma de contabilidade centrada na API (API-first) para o mercado da UE/EEE, cujo lançamento integra a conformidade fiscal total com a Lituânia. Tudo o que o produto faz - faturação, contabilidade geral, reconciliação bancária, i.SAF - está disponível através de uma única API JSON.

1. Obter uma chave de API

Cada pedido (request) é autenticado com uma chave de API Bearer associada a uma única empresa:

Authorization: Bearer nl_...

Para desenvolvimento local, inicialize uma empresa e uma chave:

pnpm --filter @nordlet/db bootstrap:dev     # empresa vazia
pnpm --filter @nordlet/api seed:demo        # empresa com dados de demonstração

Referência da API interativa (especificação OpenAPI em /openapi.json; uma instância local disponibiliza a mesma referência em http://localhost:3001/docs).

Postman

Prefere o Postman? Importe a coleção pronta a usar - todos os endpoints, agrupados por módulo, com autenticação bearer pré-configurada: Coleção do Postman do Nordlet. Após a importação, defina a variável bearerToken da coleção com a sua chave de API e cada pedido será autenticado.

Empresas em sandbox

Para testes de integração, crie uma empresa com isSandbox: true (POST /v1/account/companies/create, ou selecione a caixa de verificação de sandbox durante a integração na aplicação). Uma empresa em sandbox comporta-se exatamente como uma empresa real - mesmos módulos, mesma API, para que possa testar com um volume de transações realista -, mas apresenta um distintivo visível de dados de teste e a respetiva eliminação purga tudo de imediato, em vez de aguardar o período de retenção de 10 dias. Pode executar qualquer número de empresas em sandbox juntamente com a sua empresa real sob a mesma conta; o parâmetro é imutável após a criação, pelo que a contabilidade real nunca pode ser reclassificada inadvertidamente como dados de teste. A utilização numa empresa em sandbox é contabilizada e faturada exatamente da mesma forma que numa empresa real: pedidos, páginas de digitalização de documentos, armazenamento e a taxa de reativação. As declarações e as faturas eletrónicas de uma empresa em sandbox são sempre enviadas para os endpoints de teste das administrações fiscais.

2. Primeiros passos

Cada operação consiste num POST /v1/{module}/{resource}/{action} com um corpo JSON. Criar um cliente:

curl -X POST https://api.nordlet.com/v1/partners/create \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: partner-create-001" \
  -d '{"name": "UAB Klientas", "code": "301111222", "vatCode": "LT100001112223"}'

Emitir uma fatura (osmontantes são strings decimais, nunca floats):

curl -X POST https://api.nordlet.com/v1/sales/invoices/create \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{
    "partnerId": "<partner id>",
    "lines": [{"description": "Konsultacijos", "quantity": 4, "unitPriceExclVat": "75.0000", "vatClassifierCode": "PVM1"}]
  }'

curl -X POST https://api.nordlet.com/v1/sales/invoices/issue \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"id": "<invoice id>", "issueDate": "2026-07-09"}'

A emissão atribui um número sequencial sem falhas (SF-1), verifica se o período contabilístico está aberto e regista o lançamento contabilístico equilibrado (D 2410 clientes / C 5001 proveitos / C 4492 IVA) na mesma transação.

3. O ciclo completo

Passo Chamada
Transferir a contabilidade de um sistema anterior migration/books/validate → migration/books/import - ver Migrar de outro sistema
Registar uma fatura de fornecedor purchases/invoices/create → purchases/invoices/register
Importar um extrato bancário bank/statements/import (XML camt.053) ou bank/transactions/import (JSON)
Obter sugestões de correspondência bank/transactions/suggest-matches
Reconciliar um pagamento bank/transactions/match - regista o pagamento e atualiza o paymentStatus
Pagar a fornecedores bank/payments/export - ficheiro SEPA pain.001 para o seu banco
Registos mensais de IVA declarations/lt/isaf/generate - XML i.SAF 1.2 para a VMI
Valores da declaração de IVA declarations/lt/fr0600/compute - campos do FR0600 reconciliados com os registos
Expedir mercadorias com uma guia de transporte transport/waybills/create → issue, e depois declarations/lt/ivaz/generate - XML i.VAZ para a VMI

4. SDK para TypeScript

import { createNordletClient, idempotent } from '@nordlet/sdk'

const client = createNordletClient({
  baseUrl: 'https://api.nordlet.com',
  apiKey: process.env.NORDLET_API_KEY!,
})

const { data, error } = await client.POST('/v1/sales/invoices/create', {
  body: {
    partnerId,
    lines: [{ description: 'Konsultacijos', quantity: 4, unitPriceExclVat: '75.0000' }],
  },
  ...idempotent(`order-${orderId}`),
})

O SDK é gerado a partir da especificação OpenAPI em direto (pnpm --filter @nordlet/sdk generate), pelo que cada pedido e resposta está totalmente tipado.

5. Webhooks

Subscreva eventos em vez de efetuar consultas periódicas (polling):

curl -X POST https://api.nordlet.com/v1/webhooks/subscriptions/create \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/hooks/hyperion", "events": ["sale_invoice.issued", "sale_invoice.paid"]}'

As entregas incluem uma assinatura HMAC com carimbo de data/hora (x-nordlet-signature-v2: t=<unix seconds>,v1=<hex> sobre <timestamp>.<raw body> com o segredo da sua subscrição) a par da assinatura x-nordlet-signature: sha256=<hex> original do corpo bruto, sendo repetidas durante cerca de 24 horas. Consulte as Convenções da API relativamente à janela de retransmissão.

O corpo de cada entrega tem o formato { id, version, companyId, eventType, createdAt, data }: version é a versão do envelope (atualmente 1) e companyId é a empresa a que o evento pertence, permitindo que um único destinatário sirva várias empresas. A subscrição de um nome que não conste da lista abaixo é rejeitada com o código 400; utilize "*" para todos os eventos. Após 5 falhas consecutivas de entrega, a subscrição é suspensa e os proprietários da empresa recebem um e-mail; reative-a em Conta → Webhooks ou através de webhooks/subscriptions/update com isActive: true.

Eventos: agreement.invoice_generated, bank_feed.synced, document_capture.peppol_received, filing.failed, filing.rejected, goods_receipt.posted, intercompany.invoice_mirrored, item.created, item.deleted, item.updated, lead.converted, lead.created, partner_inquiry.created, payroll_run.approved, payroll_run.reversed, pos_report.created, price_list.updated, purchase_invoice.paid, purchase_invoice.registered, purchase_order.approved, purchase_order.received, refund_liability.actual, refund_liability.trued_up, report.completed, report.failed, revenue_recognition.modified, revenue_recognition.posted, sale_invoice.einvoice_sent, sale_invoice.issued, sale_invoice.paid, sale_invoice.peppol_delivered, sale_invoice.peppol_failed, sale_invoice.peppol_rejected, sale_invoice.peppol_sent, sale_invoice.quote_sent, sale_invoice.sent, sales_order.created, sales_order.fulfilled, settlement.imported, settlement.posted, settlement.updated, stock.changed, stock.reorder_needed, vat_review.opened, vat_review.resolved. O documento OpenAPI lista cada um deles em x-webhooks.

Consulte as Convenções da API para obter informações sobre consultas de listagem, envelopes de erro, semântica de idempotência e limites de cadência (rate limits).