← Dokumentation / Leitfäden
Erste Schritte
API-Schlüssel, erste Aufrufe, der vollständige Rechnungszyklus, SDKs und Webhooks.
Nordlet ist eine API-first-Buchhaltungsplattform für den EU/EWR-Markt, die zum Start die vollständige Compliance für Litauen bietet. Alle Funktionen des Produkts — Rechnungsstellung, Hauptbuch (General Ledger), Bankabgleich, i.SAF — stehen über eine einzige JSON-API zur Verfügung.
1. API-Schlüssel abrufen
Jede Anfrage wird mit einem Bearer-API-Schlüssel authentifiziert, der auf ein einziges Unternehmen beschränkt ist:
Authorization: Bearer nl_...
Für die lokale Entwicklung können Sie ein Unternehmen und einen Schlüssel initialisieren (bootstrap):
pnpm --filter @nordlet/db bootstrap:dev # empty company
pnpm --filter @nordlet/api seed:demo # company with demo data
Interaktive API-Referenz (OpenAPI-Spezifikation unter /openapi.json; eine lokale Instanz stellt dieselbe Referenz unter http://localhost:3001/docs bereit).
Postman
Bevorzugen Sie Postman? Importieren Sie die vorgefertigte Collection — jeder Endpunkt, gruppiert nach Modulen, mit vorkonfigurierter Bearer-Authentifizierung: Nordlet Postman collection. Setzen Sie nach dem Import die Variable bearerToken der Collection auf Ihren API-Schlüssel, und jede Anfrage wird automatisch authentifiziert.
Sandbox-Unternehmen
Erstellen Sie für Integrationstests ein Unternehmen mit isSandbox: true (POST /v1/account/companies/create, oder aktivieren Sie das Sandbox-Kontrollkästchen während des Onboardings in der App). Ein Sandbox-Unternehmen verhält sich exakt wie ein echtes Unternehmen — gleiche Module, gleiche API, sodass Sie realistische Transaktionsvolumina darüber abwickeln können. Es ist jedoch deutlich als Testdaten gekennzeichnet, und beim Löschen werden alle Daten sofort und nicht erst nach der 10-tägigen Aufbewahrungsfrist endgültig entfernt. Sie können beliebig viele Sandbox-Unternehmen neben Ihrem echten Unternehmen unter demselben Konto betreiben; das Flag ist nach der Erstellung unveränderlich, sodass echte Bücher niemals stillschweigend als Testdaten umklassifiziert werden können. Die Nutzung in einem Sandbox-Unternehmen wird exakt so gemessen und abgerechnet wie in einem echten Unternehmen: Anfragen, Seiten für das Scannen von Dokumenten, Speicherplatz und die Reaktivierungsgebühr.
2. Erste Aufrufe
Jede Operation ist ein POST /v1/{module}/{resource}/{action} mit einem JSON-Body. Einen Kunden anlegen:
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"}'
Eine Rechnung ausstellen (Beträge sind Dezimal-Strings, niemals 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"}'
Bei der Ausstellung wird eine lückenlose Rechnungsnummer (SF-1) vergeben, geprüft, ob die Buchungsperiode offen ist, und der ausgeglichene Buchungssatz (S 2410 Forderungen / H 5001 Umsatzerlöse / H 4492 Umsatzsteuer) in derselben Transaktion verbucht.
3. Der vollständige Zyklus
| Schritt | Aufruf |
|---|---|
| Die Bücher aus einem vorherigen System übernehmen | migration/books/validate → migration/books/import — siehe Migration aus einem anderen System |
| Eine Eingangsrechnung (supplier bill) erfassen | purchases/invoices/create → purchases/invoices/register |
| Einen Kontoauszug importieren | bank/statements/import (camt.053 XML) oder bank/transactions/import (JSON) |
| Abgleichsvorschläge abrufen | bank/transactions/suggest-matches |
| Eine Zahlung abgleichen | bank/transactions/match — verbucht die Zahlung und aktualisiert paymentStatus |
| Lieferanten bezahlen | bank/payments/export — pain.001 SEPA-Datei für Ihre Bank |
| Monatliche Umsatzsteuerregister | declarations/lt/isaf/generate — i.SAF 1.2 XML für VMI |
| Kennzahlen der Umsatzsteuervoranmeldung | declarations/lt/fr0600/compute — FR0600-Felder, abgestimmt mit den Registern |
| Waren mit einem Frachtbrief versenden | transport/waybills/create → issue, dann declarations/lt/ivaz/generate — i.VAZ XML für 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}`),
})
Das SDK wird aus der Live-OpenAPI-Spezifikation generiert (pnpm --filter @nordlet/sdk generate), sodass jede Anfrage und Antwort vollständig typisiert ist.
5. Webhooks
Abonnieren Sie Ereignisse, anstatt sie durch Polling abzufragen:
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"]}'
Zustellungen enthalten eine HMAC-Signatur (x-nordlet-signature: sha256=<hex> des rohen Bodys mit Ihrem Abonnement-Geheimnis) und werden bei Fehlern mit exponentiellem Backoff erneut versucht.
Aktuelle Ereignisse: sale_invoice.issued, sale_invoice.paid, purchase_invoice.registered, purchase_invoice.paid.
Siehe API-Konventionen für Listenabfragen, Fehler-Envelopes, Idempotenz-Semantik und Rate Limits.