Reference
Every address, with its scope.
This table is generated from the same catalogue the interface checks against. What stands here is therefore not a description of the behaviour but the same fact, read twice.
| Path | Scope | Permission | What comes back |
|---|---|---|---|
| GET /api/extern/v1/me | The key itself: company, environment, scopes, last use. The first call anybody writes. |
||
| GET /api/extern/v1/customers | customers:read | VIEW_CUSTOMERS | One page of customers and suppliers, newest first. |
| GET /api/extern/v1/customers/{id} | customers:read | VIEW_CUSTOMERS | A single customer with all of their master data. |
| POST /api/extern/v1/customers | customers:write | EDIT_CUSTOMERS | Creates a customer. KRONENWERK draws the partner number from the business's own sequence. |
| GET /api/extern/v1/invoices | invoices:read | VIEW_INVOICES | Issued invoices, filterable by payment state and issue date. |
| GET /api/extern/v1/invoices/{number} | invoices:read | VIEW_INVOICES | One issued invoice, exactly as the archive froze it. |
| POST /api/extern/v1/invoices/drafts | invoices:write customers:read companies:read | EDIT_INVOICES VIEW_COMPANY_SETTINGS VIEW_CUSTOMERS | Starts an invoice draft for a customer. It is not thereby issued. |
| GET /api/extern/v1/transactions | transactions:read | VIEW_TRANSACTIONS | Transactions — orders, projects, production runs — with their stage and due date, newest first. Narrow to a period with period, from and to; the window goes by the date the work started. |
| POST /api/extern/v1/transactions | transactions:write transactions:read | EDIT_TRANSACTIONS VIEW_TRANSACTIONS | Creates a transaction. Number, stage and timeline are produced as they are on the product's own screen. |
| PATCH /api/extern/v1/transactions/{id} | transactions:write transactions:read | EDIT_TRANSACTIONS VIEW_TRANSACTIONS | Changes a transaction that already exists. A field left out stays as it is; "none" as the customer removes the customer. |
| GET /api/extern/v1/reports/outstanding | reports:read | VIEW_REPORTS | Receivables and payables outstanding today, kept apart by direction. |
| GET /api/extern/v1/webhooks | webhooks:write | MANAGE_WEBHOOKS | This company's webhook endpoints. |
| GET /api/extern/v1/webhooks/events | webhooks:write | MANAGE_WEBHOOKS | The events an endpoint can subscribe to. |
| POST /api/extern/v1/webhooks | webhooks:write | MANAGE_WEBHOOKS | Register an endpoint; the signing secret is in the answer once. |
| DELETE /api/extern/v1/webhooks/{id} | webhooks:write | MANAGE_WEBHOOKS | Disable an endpoint; the delivery log stays. |
Paging and filtering.
Every collection is a page. A nonsensical value is bounded rather than refused: a number in a URL is rarely malice and almost always a typing slip.
One call, in full.
Amounts arrive as a count of minor units and a currency code. Never as formatted text, which would carry one language's separators into a document meant for machines.
GET https://kronenwerk.org/api/extern/v1/invoices?status=OPEN&size=1\n\n{"data":[{"number":"R-2026-0001","issuedOn":"2026-04-02","buyer":"Kellermann GmbH","currency":"EUR","gross":{"minor":105910,"currency":"EUR"},"outstanding":{"minor":105910,"currency":"EUR"},"paymentState":"OPEN","overdue":false}],"page":0,"size":1,"total":1,"more":false}
A write.
Three addresses create something, and each of them requires the idempotency header. There is no address that issues an invoice, records a payment or cancels a document.
POST https://kronenwerk.org/api/extern/v1/customers\nAuthorization: Bearer greif_live_…\nIdempotency-Key: 6f1c2a8e-4b3d-4a21-9d77-0c5e1f9b2a44\n\n{"name":"Kellermann Elektrotechnik GmbH","email":"buchhaltung@kellermann.de","street":"Am Sandtorkai 41","postalCode":"20457","city":"Hamburg","country":"DE"}