Five concepts, one API, and SDKs in the languages you already run. This page is the overview; each section links deeper in a full deployment.
curl https://api.ledgerpost.dev/v1/entries \
-H "Authorization: Bearer $LEDGERPOST_KEY" \
-H "Idempotency-Key: 9f2c-entry-4471" \
-d '{
"description": "invoice 4471 paid",
"postings": [
{ "account": "cash", "amount": 4500, "side": "debit" },
{ "account": "accounts_receivable", "amount": 4500, "side": "credit" }
]
}'{
"id": "ent_5Kd91",
"sequence": 88214,
"committed_at": "2026-07-21T18:04:11Z",
"hash": "b7…e0",
"previous_hash": "a1…9c"
}Official SDKs wrap the API, handle idempotency keys, and verify the proof on reads for you.
npm install @ledgerpost/client
import { Ledgerpost } from "@ledgerpost/client";
const lp = new Ledgerpost(process.env.LEDGERPOST_KEY);
await lp.entries.commit({
idempotencyKey: "9f2c-entry-4471",
description: "invoice 4471 paid",
postings: [
{ account: "cash", amount: 4500, side: "debit" },
{ account: "accounts_receivable", amount: 4500, side: "credit" },
],
});Your service posts an entry. Ledgerpost validates that it balances, appends it to the log, links it to the hash of the previous entry, and commits. Reads return the entry with its proof; webhooks fan the entry out to whatever you build downstream.