← Grunnleggende / SDK-er
Kom i gang
API-nøkler, første kall, hele faktureringssyklusen, SDK-er og webhooks.
Nordlet er en API-først regnskapsplattform for EU/EØS-markedet, og lanseres med full etterlevelse av litauiske regelverk (Lithuanian compliance). Alt produktet kan gjøre – fakturering, hovedbok (general ledger), bankavstemming (bank reconciliation), i.SAF – er tilgjengelig via ett enkelt JSON-API.
1. Skaff deg en API-nøkkel
Hver forespørsel autentiseres med en Bearer-API-nøkkel som er knyttet til én bestemt bedrift:
Authorization: Bearer nl_...
For lokal utvikling kan du opprette en bedrift og nøkkel automatisk:
pnpm --filter @nordlet/db bootstrap:dev # tom bedrift
pnpm --filter @nordlet/api seed:demo # bedrift med demodata
Interaktiv API-referanse (OpenAPI-spesifikasjon på /openapi.json; en lokal instans viser den samme referansen på http://localhost:3001/docs).
Postman
Foretrekker du Postman? Importer den ferdige samlingen - alle endepunkter, gruppert etter modul, med forhåndskonfigurert Bearer-autentisering: Nordlet Postman-samling. Etter importen setter du samlingens bearerToken-variabel til din API-nøkkel, og dermed blir alle forespørsler autentiseres automatisk.
Sandkassebedrifter
For integrasjonstesting kan du opprette en bedrift med isSandbox: true (POST /v1/account/companies/create, eller ved å krysse av i sandkasseboksen under oppstart i appen). En sandkassebedrift oppfører seg nøyaktig som en ekte bedrift - de samme modulene, det samme API-et, slik at du kan kjøre realistisk transaksjonsvolum gjennom den - men den er tydelig merket som testdata, og sletting fjerner alt umiddelbart i stedet for etter oppbevaringsvinduet på 10 dager. Du kan kjøre et valgfritt antall sandkassebedrifter ved siden av din ekte bedrift under samme konto. Flagget kan ikke endres etter opprettelse, slik at ekte regnskap aldri ved en feiltakelse kan omklassifiseres som testdata. Bruk i en sandkassebedrift måles og faktureres på nøyaktig samme måte som bruk i en ekte bedrift: forespørsler, dokumentskanningssider, lagring og reaktiveringsgebyr. Offisielle rapporter (filings) og e-fakturaer fra en sandkassebedrift går alltid til administrasjonenes testendepunkter.
2. De første kallene
Hver operasjon utføres som POST /v1/{module}/{resource}/{action} med en JSON-melding i innholdet (body). Slik oppretter du en kunde:
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"}'
Utsted en faktura (beløp oppgis som desimaltekst, aldri flyttall):
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"}'
Utstedelse tildeler et hullfritt nummer (SF-1), sjekker at regnskapsperioden er åpen, og bokfører det balanserte bilaget (D 2410 fordring / K 5001 salgsinntekt / K 4492 mva) i samme transaksjon.
3. Hele syklusen
| Trinn | Kall |
|---|---|
| Overfør regnskapet fra et tidligere system | migration/books/validate → migration/books/import - se Migrering fra et annet system |
| Registrer en leverandørfaktura | purchases/invoices/create → purchases/invoices/register |
| Importer et kontouttog | bank/statements/import (camt.053 XML) eller bank/transactions/import (JSON) |
| Hent forslag til avstemming | bank/transactions/suggest-matches |
| Avstem en betaling | bank/transactions/match - bokfører betalingen og oppdaterer paymentStatus |
| Betal leverandører | bank/payments/export - pain.001 SEPA-fil for banken din |
| Månedlige mva-registre | declarations/lt/isaf/generate - i.SAF 1.2 XML for VMI |
| Mva-meldingstall | declarations/lt/fr0600/compute - FR0600-poster avstemt mot registre |
| Send varer med fraktbrev | transport/waybills/create → issue, deretter declarations/lt/ivaz/generate - i.VAZ XML for 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}`),
})
SDK-et genereres direkte fra den aktive OpenAPI-spesifikasjonen (pnpm --filter @nordlet/sdk generate), slik at alle forespørsler og svar har fullstendige typer.
5. Webhooks
Abonner på hendelser i stedet for å avspørre (polling) API-et:
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"]}'
Meldinger leveres med en tidsstempling med HMAC-signatur (x-nordlet-signature-v2: t=<unix seconds>,v1=<hex> over <timestamp>.<raw body> med abonnementshemmeligheten din) i tillegg til den opprinnelige x-nordlet-signature: sha256=<hex> for selve innholdet, og levering forsøkes på nytt i omtrent 24 timer. Se API-konvensjoner for informasjon om gjenbrukingsvinduet (replay window).
Hver leveringsmelding har formatet { id, version, companyId, eventType, createdAt, data }: version er konvoluttversjonen (for tiden 1) og companyId er bedriften som hendelsen tilhører, slik at én mottaker kan betjene flere bedrifter. Abonnement på et navn som ikke finnes i listen nedenfor, avvises med 400. Bruk "*" for å abonnere på alle hendelser. Hvis 5 hendelser på rad ikke kan leveres, settes abonnementet på pause, og eierne av bedriften mottar en e-post. Du kan aktivere det igjen under Konto → Webhooks eller ved hjelp av webhooks/subscriptions/update med isActive: true.
Hendelser: 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. OpenAPI-dokumentet lister opp hver enkelt under x-webhooks.
Se API-konvensjoner for listeforespørsler, feilkonvolutter, idempotens og hastighetsgrenser (rate limits).