04 / /dev/accounting
devacc
/dev/accounting · Accounting API
Add bookkeeping to your software: record balanced journal entries, keep their source documents and validate e-invoices. Each customer has a separate accounting tenant.
POST /journal-entries
| Side | Account | Amount |
|---|---|---|
| Debit | Account A | €125.00 |
| Credit | Account B | €125.00 |
201 CreatedDraft · not posted
Request and response
Replace the fictitious period and account IDs with IDs from your setup.
{
"periodId": "per_01ARZ3NDEKTSV4RRFFQ69G5FAV",
"bookingDate": "2026-10-05",
"currency": "EUR",
"bookingText": "Example purchase",
"lines": [
{
"accountId": "acct_01ARZ3NDEKTSV4RRFFQ69G5FAW",
"side": "debit",
"amount": { "amount": "12500", "currency": "EUR" }
},
{
"accountId": "acct_01ARZ3NDEKTSV4RRFFQ69G5FAX",
"side": "credit",
"amount": { "amount": "12500", "currency": "EUR" }
}
]
} Response excerpt · amounts are integer cents (12500 = €125.00).
{
"status": "draft",
"seq": null
}Authentication and posting
Canonical base: https://api.d0.eu/accounting/v1.
Send Authorization: DPoP <access-token>, a fresh ES256 DPoP proof binding the token, method, exact public URI, and nonce, plus X-Accounting-Tenant: ten_…. Each mutation needs an Idempotency-Key; reuse the same key when retrying that operation, and use a
fresh key for a new operation. Draft creation also needs Content-Type: application/json. On a nonce challenge, use the server's DPoP-Nonce value as the nonce claim in a newly signed proof and retry.
Create accounts and an open period first. Writes need accounting.write scope, identity grant, and tenant permission; reads need accounting.read and its grants.
A draft has no booking sequence or hash-chain entry. Posting needs an archived source
document linked to the draft. Link it with bodyless POST /journal-entries/{entryId}/documents/{documentId},
then post with bodyless POST /journal-entries/{entryId}/post. Linking
returns 204; posting returns 200 and assigns the sequence. Read posted
entries with GET /journal-entries?status=posted. Use the IDs returned by your
tenant setup and document workflow.
Bookkeeping inside your application
Your application provides the user interface and accounting rules. devacc records entries, preserves linked documents and exposes the results through an API.
- 01
Post and query a ledger
Create draft entries, post and reverse them, inspect account statements and balances, and finalize periods.
- 02
Keep source documents linked
Upload and retrieve source documents, link them to postings, and export a consistent tenant record.
- 03
Validate e-invoices
Validate archived XRechnung XML against the configured policy, then review its syntax, profile, issues, and the validator and ruleset used.
- 04
Create hybrid PDFs
Combine validated CII invoice XML with an archived visual PDF into a ZUGFeRD/Factur-X PDF derivative.
- 05
Integrate by API and events
Provision isolated tenants and access, then receive signed notifications when journal entries are posted.
Requirements & service limits
Use devacc as the ledger and document layer inside your own bookkeeping product. Your integration supplies the chart of accounts and its accounting and tax rules. Hybrid PDF creation takes a validated CII XML invoice together with its original archived PDF visual.
Common questions
Who is the Accounting API for?
It is designed for SaaS teams that want to build bookkeeping workflows around an API and their own customer experience. Integration model
Which accounting workflows are available?
The API supports draft and posted double-entry journal entries, reversals, account statements and balances, and period finalization. Ledger workflows
How are e-invoice PDFs created?
Validate an archived CII XML invoice, then provide its original archived PDF visual to create a ZUGFeRD/Factur-X hybrid PDF derivative. Hybrid PDF workflow