Nordlet

← Dokumentacija / Vodiči

Početak rada

API ključevi, prvi pozivi, cijeli ciklus izdavanja računa, SDK-ovi i webhoookovi.

Nordlet je računovodstvena platforma usmjerena na API (API-first) za tržište EU-a i EGP-a, a pokreće se s potpunom usklađenošću s litavskim propisima. Sve što proizvod može – izdavanje računa, glavna knjiga (general ledger), usklađivanje bankovnih izvoda (bank reconciliation), i.SAF – dostupno je putem jednog JSON API-ja.

1. Dobivanje API ključa

Svaki se zahtjev autentificira Bearer API ključem koji je vezan uz jednu tvrtku:

Authorization: Bearer nl_...

Za lokalni razvoj možete inicijalizirati tvrtku i ključ:

pnpm --filter @nordlet/db bootstrap:dev     # prazna tvrtka
pnpm --filter @nordlet/api seed:demo        # tvrtka s demo podacima

Interaktivna API referenca (OpenAPI specifikacija nalazi se na adresi /openapi.json; lokalna instanca nudi istu referencu na http://localhost:3001/docs).

Postman

Preferirate Postman? Uvezite gotovu zbirku – svaki je krajnja točka (endpoint), grupirana po modulima, s unaprijed postavljenom bearer autentifikacijom: Nordlet Postman zbirka. Nakon uvoza, postavite varijablu zbirke bearerToken na svoj API ključ i svaki će zahtjev biti autentificiran.

Testne okoline (sandbox tvrtke)

Za testiranje integracije stvorite tvrtku s parametrom isSandbox: true (POST /v1/account/companies/create ili označite testnu kućicu (sandbox checkbox) tijekom početnog podešavanja u aplikaciji). Testna tvrtka ponaša se potpuno isto kao i stvarna – isti moduli, isti API, tako da kroz nju možete provoditi realan volumen transakcija – ali je jasno označena kao testni podatak, a njezino brisanje uklanja sve podatke odmah umjesto nakon razdoblja čuvanja od 10 dana. Unutar istog računa možete pokrenuti bilo koji broj testnih tvrtki uz svoju stvarnu tvrtku. Oznaka se nakon stvaranja više ne može mijenjati, čime se osigurava da se stvarne poslovne knjige (books) nikada ne mogu tiho preklasificirati u testne podatke. Korištenje u testnoj tvrtki mjeri se i naplaćuje na isti način kao i korištenje u stvarnoj tvrtki: zahtjevi, stranice za skeniranje dokumenata, pohrana i naknada za reaktivaciju. Prijave i e-računi testne tvrtke uvijek se šalju na testne krajnje točke nadležnih institucija.

2. Prvi pozivi

Svaka je operacija POST /v1/{module}/{resource}/{action} s JSON tijelom (body). Stvaranje kupca ili dobavljača (partner):

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"}'

Izdavanje računa (iznosi su decimalni nizovi znakova, nikada s pomičnom zarezom (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"}'

Izdavanjem se dodjeljuje broj bez praznina (SF-1), provjerava je li obračunsko razdoblje otvoreno te se u istoj transakciji knjiži uravnotežena temeljnica (D 2410 potraživanja / C 5001 prihodi / C 4492 PDV).

3. Cijeli ciklus

Korak Poziv
Prijenos poslovnih knjiga iz prethodnog sustava migration/books/validate → migration/books/import - pogledajte Migracija iz drugog sustava
Evidentiranje ulaznog računa dobavljača purchases/invoices/create → purchases/invoices/register
Uvoz bankovnog izvoda bank/statements/import (camt.053 XML) ili bank/transactions/import (JSON)
Dohvaćanje prijedloga za usklađivanje bank/transactions/suggest-matches
Usklađivanje plaćanja bank/transactions/match - knjiži plaćanje i ažurira status plaćanja (paymentStatus)
Isplata dobavljačima bank/payments/export - pain.001 SEPA datoteka za vašu banku
Mjesečni PDV registri declarations/lt/isaf/generate - i.SAF 1.2 XML za poreznu upravu
Podaci za prijavu PDV-a declarations/lt/fr0600/compute - polja obrasca FR0600 usklađena s registrima
Otprema robe uz otpremnicu transport/waybills/create → issue, zatim declarations/lt/ivaz/generate - i.VAZ XML za poreznu upravu

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 se generira iz aktivne OpenAPI specifikacije (pnpm --filter @nordlet/sdk generate), stoga su svaki zahtjev i odgovor u potpunosti tipizirani.

5. Webhookovi

Pretplatite se na događaje umjesto slanja upita (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"]}'

Isporuke sadrže HMAC potpis s vremenskom oznakom (x-nordlet-signature-v2: t=<unix seconds>,v1=<hex> preko <timestamp>.<raw body> s tajnim ključem vaše pretplate) uz izvorni x-nordlet-signature: sha256=<hex> sirovog tijela (raw body), a pokušaji slanja ponavljaju se otprilike 24 sata. Pogledajte API konvencije za prozor ponovnog slanja (replay window).

Svako tijelo isporuke ima oblik { id, version, companyId, eventType, createdAt, data }: version je verzija omotnice (trenutačno 1), a companyId je tvrtka kojoj događaj pripada, tako da jedan primatelj može opsluživati više tvrtki. Pretplata na naziv koji se ne nalazi na popisu u nastavku odbija se s kodom 400; koristite "*" za sve događaje. Nakon što se 5 događaja zaredom ne uspije isporučiti, pretplata se pauzira, a vlasnici tvrtke dobivaju e-poruku. Ponovno je aktivirajte u odjeljku Račun → Webhookovi (Account → Webhooks) ili putem poziva webhooks/subscriptions/update s parametrom isActive: true.

Događaji: 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. Dokument OpenAPI navodi svaki od njih pod odjeljkom x-webhooks.

Pogledajte API konvencije za upite popisa, omotnice pogrešaka, semantiku idempotencije i ograničenja stope poziva (rate limits).