NovaLedger
Universal · v2.1
API v2.1 · Online
base: https://api.novaledger.io/v2 12,847 req today · 99.2% success · p50: 42ms · p99: 280ms
KM
Kwame M.
Admin
Overview
Dashboard
Endpoints 48
Playground
Security
API Keys
OAuth 2.0
Rate Limits
Integrations
Webhooks
Mobile Money APIs
SDKs & Libraries
Monitoring
Request Logs

API Console

REST API v2.1 · OAuth 2.0 · Webhooks · Mobile Money APIs · 48 endpoints · Postman collection · Multi-entity scoping

Request Volume — Last 7 Days
Response Status Distribution
Quick Start
# 1. Authenticate with your API key curl -X GET "https://api.novaledger.io/v2/financials/summary" \ -H "Authorization: Bearer nla_live_sk_xK9mP2...R8vQ" \ -H "X-Entity-ID: acme-holdings-ug" \ -H "X-Currency: USD" # Response { "entity": "Acme Holdings Ltd.", "period": "2026-03", "revenue": 842600, "net_income": 199320, "cash": 284200, "currency": "USD" }

API Endpoints

48 REST endpoints · Multi-entity · Multi-currency · XBRL export · Mobile money

Select an endpoint to view documentation

API Playground

Live API testing · Real sandbox data · Try all endpoints without writing code

Response
Click Send to make a live API request…

API Keys

Bearer token authentication · Scoped permissions · IP restriction · Entity scoping · Expiry

OAuth 2.0

Authorization Code flow · Client Credentials · PKCE · Refresh tokens · Scopes

OAuth 2.0 Authorization Code Flow
OAuth Endpoints
# Authorization endpoint GET https://auth.novaledger.io/oauth/authorize ?client_id=YOUR_CLIENT_ID &redirect_uri=https://your-app.com/callback &response_type=code &scope=financials:read invoices:write payroll:read &code_challenge=BASE64URL(SHA256(code_verifier)) # PKCE # Token exchange POST https://auth.novaledger.io/oauth/token { "grant_type": "authorization_code", "code": "AUTH_CODE", "client_id": "YOUR_CLIENT_ID", "code_verifier": "PKCE_VERIFIER" }
Available OAuth Scopes

Rate Limits

Token bucket algorithm · Per-key limits · Tier-based · X-RateLimit headers

Rate Limit Tiers
Live Usage — Active Keys
Rate Limit Response Headers
HTTP/1.1 200 OK X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 842 X-RateLimit-Reset: 1711065600 X-RateLimit-Window: 60s # When rate limit exceeded: HTTP/1.1 429 Too Many Requests Retry-After: 42 { "error": "rate_limit_exceeded", "message": "1000 requests per minute exceeded", "retry_after": 42, "docs": "https://docs.novaledger.io/api/rate-limits" }

Webhooks

Event-driven · HMAC-SHA256 signed · Retry with exponential backoff · 28 event types

Webhook Payload Example
POST https://your-app.com/webhooks/novaledger X-NovaLedger-Signature: sha256=abc123... X-NovaLedger-Event: invoice.paid X-NovaLedger-Delivery: evt_01HN8M2P... { "event": "invoice.paid", "timestamp": "2026-03-22T14:23:00Z", "entity_id": "acme-holdings-ug", "data": { "invoice_id": "INV-2298", "amount": 8400.00, "currency": "USD", "payment_method": "mpesa", "mpesa_ref": "QJY56HKP21" } }

Mobile Money API Integrations

M-Pesa · MTN MoMo · Airtel Money · Flutterwave · Paystack · Wave · Orange Money — unified payment API

Unified Mobile Money Payment Request
POST /v2/payments/mobile-money Authorization: Bearer nla_live_sk_... { "provider": "mpesa", // mpesa | mtn | airtel | flutterwave | paystack "phone": "+254712345678", "amount": 4800, "currency": "KES", "reference": "BILL-0344", "description": "Vendor payment — Apex Supplies", "entity_id": "techops-ke", "auto_reconcile": true // auto-link to GL on confirmation } # Response { "payment_id": "pay_01HN8M...", "status": "pending", "provider_ref": "QJY56HKP21", "gl_entry": "JE-0843" // auto-created if auto_reconcile=true }

SDKs & Client Libraries

Official SDKs for 6 languages · OpenAPI 3.1 spec · Auto-generated clients

JavaScript / Node.js Example
import NovaLedger from '@novaledger/sdk'; const client = new NovaLedger({ apiKey: process.env.NOVALEDGER_API_KEY, entityId: 'acme-holdings-ug', sandbox: false, }); // Get financial summary const summary = await client.financials.summary({ period: '2026-03', currency: 'USD', }); // Create invoice const invoice = await client.invoices.create({ clientId: 'client_techcorp', lineItems: [{ description: 'Consulting', amount: 8400 }], currency: 'USD', jurisdiction: 'KE', // auto-applies VAT 16% eTIMS: true, // auto-submit to KRA eTIMS }); // Pay vendor via M-Pesa const payment = await client.payments.mobileMoney({ provider: 'mpesa', phone: '+254712345678', amount: 4800, currency: 'KES', autoReconcile: true, });

Request Logs

Last 100 API requests · Filter by status, key, endpoint · Full request/response bodies