Built for modern financial infrastructure
A standalone, double-entry general ledger engine supporting ISO standards, hash-chain integrity, config-driven posting rules, and full audit trail.
Double-Entry Accounting
Formula-based posting rules that automatically enforce balanced entries. Define movement definitions once and let the engine handle the rest.
- Config-driven posting rules — zero code changes for new transaction types
- Recursive descent formula parser — safe evaluation without eval()
- Automatic balance enforcement: total debits always equal total credits
- Template variables resolved at posting time (e.g. {{entity_account}})
- Decimal(38,18) precision for all monetary amounts
{
"name": "Payment Received",
"eventType": "payment.received",
"lines": [
{
"accountCode": "1100",
"direction": "DEBIT",
"formula": "{{amount}}"
},
{
"accountCode": "4100",
"direction": "CREDIT",
"formula": "{{amount}}"
}
]
}Multi-Currency Support
Unified currency registry supporting fiat, cryptocurrencies, stablecoins, and commodities. Built on ISO 4217 and ISO 24165-1:2025 standards.
- ISO 4217 fiat currencies (USD, EUR, GBP, etc.)
- ISO 24165-1:2025 digital token identifiers (BTC, ETH, etc.)
- Stablecoin and commodity support out of the box
- FX rate snapshots with historical conversion
- Configurable decimal precision per currency
Fiat (ISO 4217)
USD, EUR, GBP, JPY
Crypto (ISO 24165)
BTC, ETH, SOL
Stablecoins
USDT, USDC, DAI
Commodities
XAU, XAG
Precision
Decimal(38,18)
FX Snapshots
Historical rates
Chart of Accounts
Hierarchical chart of accounts with IFRS/GAAP classification metadata. Five standard account types with unlimited depth.
- ASSET, LIABILITY, EQUITY, REVENUE, EXPENSE account types
- IFRS and GAAP classification metadata on every account
- Hierarchical parent-child relationships with unlimited depth
- Active/inactive status management
- Bulk import and template support
Account Types
├── ASSET
│ ├── 1000 Cash & Equivalents
│ ├── 1100 Accounts Receivable
│ └── 1200 Digital Assets
├── LIABILITY
│ ├── 2000 Accounts Payable
│ └── 2100 Accrued Expenses
├── EQUITY
│ └── 3000 Retained Earnings
├── REVENUE
│ ├── 4000 Service Revenue
│ └── 4100 Transaction Fees
└── EXPENSE
├── 5000 Operating Expenses
└── 5100 Cost of RevenueFinancial Reports
Real-time financial reporting with trial balance, profit & loss, and balance sheet generation. Export to CSV, PDF, and Excel.
- Trial balance with period filtering
- Profit & Loss statement with comparative periods
- Balance sheet with IFRS/GAAP grouping
- Scheduled report generation with email delivery
- Export in CSV, PDF, and XLSX formats
Trial Balance
Real-time DR/CR totals
Profit & Loss
Period comparison
Balance Sheet
IFRS/GAAP grouped
Scheduling
Cron-based delivery
Export Formats
CSV, PDF, XLSX
Templates
Custom report configs
Event-Driven Architecture
Webhooks, event streaming, and a dead letter queue for reliable event delivery. Never miss a financial event.
- Webhook endpoints with configurable event type filters
- Automatic retry with exponential backoff
- Dead letter queue for failed deliveries
- Event streaming for real-time consumers
- HMAC signature verification on all deliveries
POST /api/v2/webhooks
{
"url": "https://app.example.com/hooks/gl",
"eventTypes": [
"event.posted",
"event.reversed",
"balance.threshold"
]
}
// Delivery payload
{
"id": "wh_abc123",
"type": "event.posted",
"timestamp": "2026-03-28T12:00:00Z",
"data": {
"eventId": "evt_xyz",
"eventKey": "payment-001",
"status": "POSTED"
}
}RESTful API
Comprehensive REST API with OpenAPI specification, auto-generated SDKs, and an interactive playground. Build integrations in minutes.
- Full OpenAPI 3.0 specification with Swagger UI
- Idempotent event ingestion — safe retries guaranteed
- JWT and API key authentication
- Rate limiting with configurable per-key limits
- SDKs for TypeScript, Python, and Go
// TypeScript SDK example
import { GlClient } from '@glsystem/sdk';
const gl = new GlClient({
apiKey: 'glk_live_...',
baseUrl: 'https://api.glsystem.io',
});
// Post an event (idempotent)
const event = await gl.events.create({
eventKey: 'payment-001',
eventType: 'payment.received',
currencyCode: 'USD',
payload: {
amount: '1500.00',
entity_account: '1100',
},
});
console.log(event.status); // "POSTED"Audit Trail & Integrity
SHA-256 hash chain provides blockchain-equivalent immutability for your accounting records. Every entry is tamper-evident.
- SHA-256 hash chain linking every ledger entry
- Immutable event log — no edits, only corrections via reversals
- Full rebuild capability: truncate and replay from events
- Queryable audit trail with user, IP, and change tracking
- Genesis hash verification for chain integrity
Hash Chain Verification
Entry #1 (Genesis)
hash: sha256("0000...0000" + data₁)
→ a1b2c3d4e5f6...
Entry #2
hash: sha256("a1b2c3d4e5f6..." + data₂)
→ f7e8d9c0b1a2...
Entry #3
hash: sha256("f7e8d9c0b1a2..." + data₃)
→ 3c4d5e6f7a8b...
✓ Chain intact — all hashes verified
✓ Tamper-evident — any change
breaks the chain downstreamMulti-Tenant SaaS
Enterprise-grade multi-tenancy with schema isolation, usage metering, and integrated billing. Scale from one tenant to thousands.
- Schema-level tenant isolation in PostgreSQL
- Usage metering with per-event counting
- Stripe-integrated billing with plan management
- Per-tenant API keys with independent rate limits
- Admin dashboard for tenant provisioning and monitoring
Isolation
Schema per tenant
Metering
Per-event usage
Billing
Stripe integration
API Keys
Scoped per tenant
Rate Limits
Per-key RPM
Admin
Full dashboard
Ready to get started?
Create your free account and start posting entries in minutes. No credit card required.