← Belgeler / Kılavuzlar
Başlangıç Kılavuzu
API anahtarları, ilk çağrılar, eksiksiz faturalandırma döngüsü, SDK'lar ve webhook'lar.
Nordlet, AB/AEA (EEA) pazarına yönelik, tam Litvanya uyumluluğuyla kullanıma sunulan API odaklı bir muhasebe platformudur. Faturalandırma, defter-i kebir (general ledger), banka mutabakatı ve i.SAF dahil olmak üzere ürünün gerçekleştirdiği her işlem tek bir JSON API üzerinden sunulur.
1. API anahtarı edinme
Her istek, tek bir şirkete yetkilendirilmiş bir Bearer API anahtarı ile doğrulanır:
Authorization: Bearer nl_...
Yerel geliştirme (local development) için bir şirket ve anahtar oluşturun:
pnpm --filter @nordlet/db bootstrap:dev # boş şirket
pnpm --filter @nordlet/api seed:demo # demo verilerine sahip şirket
İnteraktif API referansı (OpenAPI özellikleri /openapi.json adresindedir; yerel bir örnek aynı referansı http://localhost:3001/docs adresinde sunar).
Postman
Postman tercih edersiniz? Hazır koleksiyonu içe aktarın; modüllere göre gruplandırılmış, bearer kimlik doğrulaması önceden yapılandırılmış tüm uç noktalar (endpoints) hazırdır: Nordlet Postman koleksiyonu. İçe aktardıktan sonra koleksiyonun bearerToken değişkenini API anahtarınızla ayarlayın; böylece her istek otomatik olarak doğrulanır.
Sandbox şirketleri
Entegrasyon testleri için isSandbox: true parametresiyle bir şirket oluşturun (POST /v1/account/companies/create veya uygulamadaki başlangıç kurulumu -onboarding- sırasında sandbox onay kutusunu işaretleyin). Sandbox şirketi gerçek bir şirketle tamamen aynı şekilde çalışır; aynı modüllere ve aynı API'ye sahiptir, böylece gerçekçi işlem hacimlerini bu şirket üzerinden test edebilirsiniz. Ancak bu şirketler test verisi olduğunu açıkça gösterecek şekilde etiketlenir ve silindiğinde 10 günlük saklama penceresi beklenmeden veriler derhal imha edilir. Aynı hesap altında, gerçek şirketinizin yanında dilediğiniz sayıda sandbox şirketi çalıştırabilirsiniz. Bu bayrak (flag) oluşturulduktan sonra değiştirilemez, bu nedenle gerçek defterlerin yanlışlıkla test verisi olarak yeniden sınıflandırılması önlenmiş olur. Sandbox şirketindeki kullanım, gerçek bir şirketteki kullanım gibi ölçülür ve faturalandırılır: istekler, belge tarama sayfaları, depolama ve yeniden etkinleştirme ücreti. Bir sandbox şirketinin beyannameleri ve e-faturaları her zaman ilgili kurumların test uç noktalarına gönderilir.
2. İlk çağrılar
Her işlem bir JSON gövdesi ile birlikte POST /v1/{module}/{resource}/{action şeklindedir. Bir müşteri oluşturun:
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"}'
Bir fatura düzenleyin (tutarlar ondalık dizelerdir -decimal strings-, asla kayan noktalı sayı -float- değildir):
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"}'
Fatura düzenleme işlemi boşluksuz bir numara atar (SF-1), muhasebe döneminin açık olup olmadığını kontrol eder ve aynı işlem (transaction) içinde dengeli yevmiye kaydını (B 2410 alıcılar / A 5001 yurt içi satışlar / A 4492 hesaplanan KDV) kayda geçirir.
3. Tam döngü
| Adım | Çağrı |
|---|---|
| Defterleri önceki bir sistemden aktarma | migration/books/validate → migration/books/import - bkz. Başka bir sistemden geçiş |
| Tedarikçi faturası kaydetme | purchases/invoices/create → purchases/invoices/register |
| Banka ekstresi içe aktarma | bank/statements/import (camt.053 XML) veya bank/transactions/import (JSON) |
| Eşleşme önerileri alma | bank/transactions/suggest-matches |
| Ödeme mutabakatı yapma | bank/transactions/match - ödemeyi kaydeder ve paymentStatus alanını günceller |
| Tedarikçilere ödeme yapma | bank/payments/export - bankanız için pain.001 SEPA dosyası |
| Aylık KDV defterleri | declarations/lt/isaf/generate - VMI için i.SAF 1.2 XML |
| KDV beyannamesi rakamları | declarations/lt/fr0600/compute - defterlerle mutabık kılınmış FR0600 alanları |
| Sevk irsaliyesi ile mal sevkiyatı | transport/waybills/create → issue, ardından declarations/lt/ivaz/generate - VMI için i.VAZ XML |
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, canlı OpenAPI spesifikasyonundan üretilir (pnpm --filter @nordlet/sdk generate), bu nedenle her istek ve yanıt tamamen tür güvenlidir (fully typed).
5. Webhook'lar
Sürekli sorgulama (polling) yapmak yerine olaylara abone olun:
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"]}'
Teslimatlar, ham gövdenin orijinal x-nordlet-signature: sha256=<hex> başlığının yanında, abonelik gizli anahtarınızla oluşturulan zaman damgalı bir HMAC imzası (x-nordlet-signature-v2: t=<unix seconds>,v1=<hex>, <timestamp>.<raw body> üzerinden hesaplanır) taşır ve yaklaşık 24 saat boyunca yeniden denenir. Yeniden deneme penceresi için bkz. API kuralları.
Her teslimat gövdesi şu yapıdadır: { id, version, companyId, eventType, createdAt, data }. Burada version zarf sürümünü (şu anda 1) ve companyId olayın ait olduğu şirketi belirtir; böylece tek bir alıcı (receiver) birkaç্ণ şirkete hizmet edebilir. Aşağıdaki listede yer almayan bir olaya abone olunmak istenirse 400 hatasıyla reddedilir; tüm olaylar için "*" kullanın. Üst üste 5 olay teslim edilemezse abonelik duraklatılır ve şirket sahiplerine bir e-posta gönderilir; aboneliği Hesap → Webhook'lar bölümünden veya webhooks/subscriptions/update ile isActive: true kullanarak yeniden etkinleştirebilirsiniz.
Olaylar: 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 belgesi bunların her birini x-webhooks altında listeler.
Liste sorguları, hata zarfları, işlem tektipliği (idempotency) semantiği ve oran sınırları (rate limits) için bkz. API kuralları.