← Documentatie / Handleidingen
Aan de slag
API-sleutels, eerste aanroepen, de volledige facturatiecyclus, SDK's en webhooks.
Nordlet is een API-first boekhoudplatform voor de EU/EER-markt, dat van start gaat met volledige naleving van de Litouwse regelgeving (Lithuanian compliance). Alles wat het product doet - facturatie, grootboek (general ledger), bankkoppeling (bank reconciliation), i.SAF - is beschikbaar via één JSON-API.
1. Een API-sleutel ophalen
Elk verzoek wordt geverifieerd met een Bearer API-sleutel die is gekoppeld aan één entiteit:
Authorization: Bearer nl_...
Voor lokale ontwikkeling kunt u een entiteit en sleutel bootstrappen:
pnpm --filter @nordlet/db bootstrap:dev # lege entiteit
pnpm --filter @nordlet/api seed:demo # entiteit met demogegevens
Interactieve API-referentie (OpenAPI-specificatie op /openapi.json; een lokale instantie biedt dezelfde referentie op http://localhost:3001/docs).
Postman
Gebruikt u liever Postman? Importeer de kant-en-klare collectie - elk eindpunt (endpoint), gegroepeerd per module, met vooraf ingestelde Bearer-authenticatie: Nordlet Postman-collectie. Stel na het importeren de variabele bearerToken van de collectie in op uw API-sleutel en elk verzoek wordt geverifieerd.
Sandbox-entiteiten
Voor integratietesten kunt u een entiteit aanmaken met isSandbox: true (POST /v1/account/companies/create, of vink het sandbox-selectievakje aan tijdens de onboarding in de applicatie). Een sandbox-entiteit gedraagt zich exact hetzelfde als een echte entiteit - dezelfde modules, dezelfde API, zodat u er een realistisch transactievolume doorheen kunt sturen - maar deze is duidelijk voorzien van een testdatamarkering. Het verwijderen ervan wist direct alle gegevens in plaats van pas na de bewaartermijn van 10 dagen. U kunt een willekeurig aantal sandbox-entiteiten naast uw echte entiteit onder hetzelfde account beheren; de vlag is na aanmaak onveranderbaar (immutable), zodat echte administraties nooit per ongeluk als testdata kunnen worden herclassificeerd. Het gebruik in een sandbox-entiteit wordt gemeten en gefactureerd op exact dezelfde manier als het gebruik in een echte entiteit: verzoeken, document-scanningpagina's, opslag en de reactiveringskosten. Aangiften en e-facturen van een sandbox-entiteit gaan altijd naar de test-eindpunten van de belastingdienst.
2. Eerste aanroepen
Elke bewerking is een POST /v1/{module}/{resource}/{action} met een JSON-body. Maak een relatie (partner) aan:
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"}'
Reikt een factuur uit (bedragen zijn decimale strings, nooit 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"}'
Bij het uitreiken wordt een volgend nummer zonder gaten toegewezen (SF-1), gecontroleerd of de boekhoudperiode open is en in dezelfde transactie de sluitende journaalpost (D 2410 debiteuren / C 5001 omzet / C 4492 btw) geboekt.
3. De volledige cyclus
| Stap | Aanroep |
|---|---|
| De administratie overzetten vanuit een vorig systeem | migration/books/validate → migration/books/import - zie Migreren vanuit een ander systeem |
| Een inkoopfactuur registreren | purchases/invoices/create → purchases/invoices/register |
| Een bankafschrift importeren | bank/statements/import (camt.053 XML) of bank/transactions/import (JSON) |
| Matchingsuggesties ophalen | bank/transactions/suggest-matches |
| Een betaling reconciliëren | bank/transactions/match - boekt de betaling en werkt paymentStatus bij |
| Leveranciers betalen | bank/payments/export - pain.001 SEPA-bestand voor uw bank |
| Maandelijkse btw-registers | declarations/lt/isaf/generate - i.SAF 1.2 XML voor de VMI |
| Cijfers voor de btw-aangifte | declarations/lt/fr0600/compute - FR0600-velden afgestemd op de registers |
| Goederen vervoeren met een vrachtbrief | transport/waybills/create → issue, daarna declarations/lt/ivaz/generate - i.VAZ XML voor de VMI |
4. TypeScript SDK
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}`),
})
De SDK wordt gegenereerd vanuit de live OpenAPI-specificatie (pnpm --filter @nordlet/sdk generate), waardoor elk verzoek en elke respons volledig van typen is voorzien.
5. Webhooks
Abonneer u op gebeurtenissen (events) in plaats van te pollen:
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"]}'
Leveringen bevatten een van een tijdstempel voorzien HMAC-handtekening (x-nordlet-signature-v2: t=<unix seconds>,v1=<hex> over <timestamp>.<raw body> met uw abonnementsgeheim) naast de originele x-nordlet-signature: sha256=<hex> van de ruwe body, en worden gedurende ongeveer 24 uur opnieuw geprobeerd. Raadpleeg API-conventies voor het replay-venster.
Elke leveringsbody heeft de structuur { id, version, companyId, eventType, createdAt, data }: version is de versie van de envelop (momenteel 1) en companyId is de entiteit waartoe de gebeurtenis behoort, zodat één ontvanger meerdere entiteiten kan bedienen. Abonneren op een naam die niet in onderstaande lijst staat, wordt geweigerd met een 400-fout; gebruik "*" voor elke gebeurtenis. Nadat 5 gebeurtenissen op rij niet konden worden afgeleverd, wordt het abonnement gepauzeerd en ontvangen de eigenaren van de entiteit een e-mail. U kunt het hervatten via Account → Webhooks of met webhooks/subscriptions/update en isActive: true.
Gebeurtenissen: 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. Het OpenAPI-document vermeldt elke gebeurtenis onder x-webhooks.
Raadpleeg API-conventies voor lijstzoekopdrachten (list queries), foutenveloppen, idempotentiesemantiek en tarieflimieten (rate limits).