From 678a7acc01921bfe58e9503ab99edaf6389acab5 Mon Sep 17 00:00:00 2001 From: Sander van Hooft Date: Sun, 12 Jul 2026 00:44:12 +0200 Subject: [PATCH 1/4] Sync OpenAPI spec to v2-20260710 and fix docs drift - Add openapi-specs/openapi-2026-07-12.yml (v2-20260710-57729b61b9) - Update OPENAPI-BACKLOG.md with spec changes: new Task Lists resource family, aging reports, asset reinvestment reserve endpoints, time entry resume/stop, webhook activate/deactivate; external sales invoices synchronization is now official - Fix docs drift: contacts usage-charge naming (createAdditionalCharge/ getAdditionalCharges), nonexistent client accessors in external sales invoice attachment/payment examples, wrong sub-endpoint method names - Document previously undocumented methods: synchronization() on six resources, estimates all(), sales invoice reminder template getters - Expand CLAUDE.md: docs site sync rules, spec sync procedure, sub-endpoint access pattern, specs/ vs openapi-specs/ distinction --- CLAUDE.md | 29 +- OPENAPI-BACKLOG.md | 62 +- docs/contacts.md | 285 - docs/src/content/docs/reference/contacts.md | 16 +- docs/src/content/docs/reference/estimates.md | 16 + .../external-sales-invoice-attachments.md | 2 +- .../external-sales-invoice-payments.md | 4 +- .../docs/reference/external-sales-invoices.md | 33 +- .../docs/reference/financial-mutations.md | 8 + .../docs/reference/financial-statements.md | 8 + .../docs/reference/general-documents.md | 8 + .../reference/general-journal-documents.md | 8 + .../content/docs/reference/sales-invoices.md | 16 + openapi-specs/openapi-2026-07-12.yml | 54818 ++++++++++++++++ 14 files changed, 54989 insertions(+), 324 deletions(-) delete mode 100644 docs/contacts.md create mode 100644 openapi-specs/openapi-2026-07-12.yml diff --git a/CLAUDE.md b/CLAUDE.md index b7b4fef..2938c44 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,8 +8,10 @@ This is a PHP wrapper for the Moneybird API built on the Saloon PHP HTTP client ## Architecture -- **Base API Client**: `src/Api/MoneybirdApiClient.php` - Main entry point -- **Endpoints**: Each resource has its own folder in `src/Api/` with an `Endpoint` class and request classes +- **Base API Client**: `src/Api/MoneybirdApiClient.php` - Main entry point. Every resource needs an accessor method here (e.g. `contacts()`, `salesInvoices()`). +- **Endpoints**: Each resource has its own folder in `src/Api/` with an `Endpoint` class and request classes. Endpoint classes extend `BaseEndpoint` (which provides `paginate()` and `create()`). +- **Document types** are nested under `src/Api/Documents/` (GeneralDocuments, GeneralJournalDocuments, PurchaseInvoices, Receipts, TypelessDocuments). +- **Sub-endpoints** (e.g. sales invoice payments, external sales invoice attachments/payments) have no top-level client accessor — they are reached via the parent endpoint: `$client->externalSalesInvoices()->attachments()`. - **Request Classes**: Inherit from base classes in `src/Api/Support/` (BaseJsonGetRequest, BaseJsonPostRequest, etc.) - **DTOs**: Data transfer objects for type-safe responses in `src/Dto/` @@ -58,10 +60,16 @@ curl -s https://raw.githubusercontent.com/moneybird/openapi/refs/heads/main/open The `openapi-specs/` directory contains dated versions of the spec for reference and comparison. +After pulling a new spec: +1. Diff against the previous dated spec at the path/operation level (extract `METHOD /path` pairs from `paths:` in both files and diff those) — a raw line diff is too noisy. +2. Update the **Current Spec Version** section below. +3. Update `OPENAPI-BACKLOG.md`: add newly introduced endpoints/resources, and re-verify its "not in spec" claims — endpoints this library implements as undocumented occasionally become official (e.g. external sales invoices synchronization in v2-20260710). +4. Check whether any spec change affects the docs site (see Documentation Site below). + ### Current Spec Version -- **File**: `openapi-specs/openapi-2025-01-07.yml` -- **API Version**: v2-20251223-d1277b6a05 +- **File**: `openapi-specs/openapi-2026-07-12.yml` +- **API Version**: v2-20260710-57729b61b9 - **Base URL**: https://moneybird.com/api/v2 ## Implementation Status @@ -71,6 +79,19 @@ See `OPENAPI-BACKLOG.md` for a detailed comparison between this library and the - Missing methods on existing resources - Potential improvements +Note: `specs/` (endpoint implementation checklist and endpoint-generation templates) is a separate directory from `openapi-specs/` (dated copies of the official OpenAPI spec). + +## Documentation Site + +User-facing docs live in `docs/` (Astro + Starlight): + +- One reference page per resource in `docs/src/content/docs/reference/*.md`; the sidebar is autogenerated from that directory, so a new resource only needs a new page there. +- Guides in `docs/src/content/docs/guides/`. + +**Keep docs in sync with the code.** When adding, renaming, or removing endpoint methods, update the matching reference page. Every method call in a code sample must exist on the endpoint class it's called on — docs have drifted before (renamed methods, nonexistent client accessors). Sub-endpoint examples must use the parent-accessor style (`$client->externalSalesInvoices()->payments()`), since there are no top-level accessors for sub-endpoints. + +Known deliberate omission: `TypelessDocumentsEndpoint::update()` exists but is intentionally undocumented — the Moneybird API does not support updating typeless documents. + ## Rate Limiting The API has a rate limit of 150 requests per 5 minutes. This is handled automatically by the Saloon rate limit plugin. diff --git a/OPENAPI-BACKLOG.md b/OPENAPI-BACKLOG.md index 2d41c81..d158587 100644 --- a/OPENAPI-BACKLOG.md +++ b/OPENAPI-BACKLOG.md @@ -2,9 +2,23 @@ This document tracks the differences between this PHP library and the official Moneybird OpenAPI specification. -**Last Updated**: 2025-01-07 -**OpenAPI Spec Version**: v2-20251223-d1277b6a05 -**Spec File**: `openapi-specs/openapi-2025-01-07.yml` +**Last Updated**: 2026-07-12 +**OpenAPI Spec Version**: v2-20260710-57729b61b9 +**Spec File**: `openapi-specs/openapi-2026-07-12.yml` + +--- + +## 🆕 Spec Changes Since 2025-01-07 (v2-20251223 → v2-20260710) + +New in the official spec, compared to the previous stored version: + +- **Task Lists** (entirely new resource family, not implemented): `task_lists`, `task_list_groups`, `task_list_tasks` (incl. assignment, completion, notes), `task_list_templates` +- **External Sales Invoices synchronization** (`GET`/`POST /external_sales_invoices/synchronization`) is now officially in the spec — this library already implemented it (`getSynchronization()` / `synchronize()`), so it is no longer "undocumented" +- **Reports**: new `GET /reports/creditors_aging` and `GET /reports/debtors_aging` +- **Assets**: new `POST`/`DELETE /assets/{id}/reinvestment_reserve_purchase` and `.../reinvestment_reserve_sale`; the sources delete path parameter was renamed `detail_id` → `source_id` +- **Time Entries**: new `PATCH /time_entries/{id}/resume` and `PATCH /time_entries/{id}/stop` (not implemented) +- **Webhooks**: new `PATCH /webhooks/{id}/activate` and `PATCH /webhooks/{id}/deactivate` (not implemented) +- **Workflows**: new `GET /workflows/{id}` (resource still not implemented) --- @@ -58,7 +72,8 @@ These resources have synchronization methods implemented, but the OpenAPI spec d |----------|---------------------|----------| | Products | `synchronization()`, `synchronize()` | ❌ No | | Financial Statements | `synchronization()`, `synchronize()` | ❌ No | -| External Sales Invoices | `getSynchronization()`, `synchronize()` | ❌ No | + +**Update 2026-07-12:** External Sales Invoices synchronization was added to the official spec and is no longer in this list — the existing `getSynchronization()` / `synchronize()` implementation is now spec-compliant. --- @@ -97,7 +112,9 @@ Full asset management including depreciation tracking. - `GET/POST /{administration_id}/assets` - List/Create - `GET/PATCH/DELETE /{administration_id}/assets/{id}` - CRUD - `POST /{administration_id}/assets/{id}/disposals` - Create disposal -- `POST/DELETE /{administration_id}/assets/{id}/sources` - Manage sources +- `POST/DELETE /{administration_id}/assets/{id}/sources` - Manage sources (delete uses `source_id`) +- `POST/DELETE /{administration_id}/assets/{id}/reinvestment_reserve_purchase` - *(new in v2-20260710)* +- `POST/DELETE /{administration_id}/assets/{id}/reinvestment_reserve_sale` - *(new in v2-20260710)* - `POST /{administration_id}/assets/{id}/value_changes/*` - Value changes (arbitrary, divestment, full_depreciation, manual, retroactive) --- @@ -108,9 +125,10 @@ Analytical reports for the administration. **Endpoints needed:** - Balance sheet, Cash flow, Profit & loss - Creditors, Debtors +- Creditors aging, Debtors aging *(new in v2-20260710)* - Revenue/Expenses by contact/project - General ledger, Journal entries -- Tax report, Subscriptions report +- Tax report, Subscriptions report, Assets report - Export endpoints (auditfile, brugstaat, ledger_accounts) --- @@ -135,6 +153,23 @@ Analytical reports for the administration. ### Workflows - `GET /{administration_id}/workflows` - List workflows +- `GET /{administration_id}/workflows/{id}` - Get single workflow *(new in v2-20260710)* + +--- + +### Task Lists *(new in v2-20260710)* +Task management resource family, entirely new in the spec: + +- `GET/POST /{administration_id}/task_lists` + `GET/PATCH/DELETE /task_lists/{id}` +- `POST /task_lists/{task_list_id}/groups` +- `GET/PATCH/DELETE /task_list_groups/{id}` + `POST /task_list_groups/{task_list_group_id}/tasks` +- `GET/PATCH/DELETE /task_list_tasks/{id}` +- `POST/DELETE /task_list_tasks/{task_list_task_id}/assignment` +- `POST/DELETE /task_list_tasks/{task_list_task_id}/completion` +- `POST /task_list_tasks/{task_list_task_id}/notes` +- `GET/POST /task_list_templates` + `GET/PATCH/DELETE /task_list_templates/{id}` +- `POST /task_list_templates/{task_list_template_id}/groups` +- `POST /task_list_templates/{task_list_template_id}/task_lists` --- @@ -160,7 +195,7 @@ Analytical reports for the administration. - `PATCH /{id}/mark_as_uncollectible` - Mark as uncollectible - Notes sub-resource -**Note:** Synchronization methods exist but are NOT in spec. +**Note:** Synchronization endpoints were added to the spec in v2-20260710; the existing implementation is now spec-compliant. --- @@ -204,7 +239,10 @@ Analytical reports for the administration. --- ### Time Entries -**Missing:** Notes sub-resource (CRUD) +**Missing:** +- Notes sub-resource (CRUD) +- `PATCH /{id}/resume` - Resume a running time entry *(new in v2-20260710)* +- `PATCH /{id}/stop` - Stop a running time entry *(new in v2-20260710)* --- @@ -224,6 +262,8 @@ Analytical reports for the administration. - `GET /webhooks` - List all webhooks - `GET /webhooks/{id}` - Get single webhook - `DELETE /webhooks/{id}` - Delete webhook +- `PATCH /webhooks/{id}/activate` - Activate webhook *(new in v2-20260710)* +- `PATCH /webhooks/{id}/deactivate` - Deactivate webhook *(new in v2-20260710)* --- @@ -259,14 +299,14 @@ All critical bugs have been fixed: ### Undocumented (May or May Not Work) 1. 5 sales invoice mark_as_* endpoints not in spec -2. 3 resources have sync methods not in spec (Products, Financial Statements, External Sales Invoices) +2. 2 resources have sync methods not in spec (Products, Financial Statements) — External Sales Invoices sync is now official 3. Financial Statements GET methods not in spec 4. Ledger Accounts create() not in spec 5. Entire Import Mappings resource not in spec ### Missing from Library -1. 6 entire resources (Assets, Reports, Customer Portal, Downloads, SEPA, Workflows) -2. Various sub-methods on existing resources +1. 7 entire resources (Assets, Reports, Customer Portal, Downloads, SEPA, Workflows, Task Lists) +2. Various sub-methods on existing resources (incl. new time entry resume/stop and webhook activate/deactivate) --- diff --git a/docs/contacts.md b/docs/contacts.md deleted file mode 100644 index 9a4097e..0000000 --- a/docs/contacts.md +++ /dev/null @@ -1,285 +0,0 @@ ---- -title: Contacts -description: Interacting with Moneybird's Contacts API. ---- - -Manage your contacts in Moneybird. - -## Working with Contacts - -This section covers how to interact with Moneybird's Contacts API. You can create, retrieve, update, and delete contacts, as well as manage contact people, notes, additional charges, and payment mandates. - -### Basic Operations - -#### Get a Contact - -Retrieve a contact by its ID. - -```php -$contact = $client->contacts()->get('contact-id-123'); -``` - -#### Get a Contact by Customer ID - -Retrieve a contact using its customer ID. - -```php -$contact = $client->contacts()->getByCustomerId('customer-123'); -``` - -#### Filter Contacts - -Filter contacts based on specific criteria. - -```php -$filters = [ - 'query' => 'Company Name', - 'customer_id' => '12345', -]; - -$contacts = $client->contacts()->filter($filters); -``` - -#### Create a Contact - -Create a new contact. - -```php -$contactData = [ - 'company_name' => 'ACME Corporation', - 'firstname' => 'John', - 'lastname' => 'Doe', - 'address1' => '123 Main Street', - 'city' => 'Amsterdam', - 'country' => 'NL', - 'email' => 'john@example.com', -]; - -$contact = $client->contacts()->create($contactData); -``` - -#### Update a Contact - -Update an existing contact. - -```php -$updateData = [ - 'email' => 'updated@example.com', - 'phone' => '+31612345678', -]; - -$contact = $client->contacts()->update('contact-id-123', $updateData); -``` - -#### Delete a Contact - -Delete a contact. - -```php -$client->contacts()->delete('contact-id-123'); -``` - -#### Paginate Contacts - -Get a paginated list of contacts. - -```php -$contacts = $client->contacts()->paginate(); - -// Iterate through the pages -foreach ($contacts as $contact) { - echo $contact->company_name; -} -``` - -### Synchronization - -#### Get Synchronization - -Get synchronization information for contacts. - -```php -$synchronization = $client->contacts()->getSynchronization(); -``` - -#### Synchronize Contacts - -Synchronize contacts with the provided IDs. - -```php -$ids = ['contact-id-1', 'contact-id-2']; -$result = $client->contacts()->synchronize($ids); -``` - -### Contact People - -#### Get a Contact Person - -Retrieve a specific contact person. - -```php -$contactPerson = $client->contacts()->getContactPerson('contact-id-123', 'person-id-456'); -``` - -#### Create a Contact Person - -Create a new contact person for a contact. - -```php -$personData = [ - 'firstname' => 'Jane', - 'lastname' => 'Smith', - 'email' => 'jane@example.com', - 'phone' => '+31612345678', - 'department' => 'Sales', -]; - -$contactPerson = $client->contacts()->createContactPerson('contact-id-123', $personData); -``` - -#### Update a Contact Person - -Update an existing contact person. - -```php -$updateData = [ - 'email' => 'updated@example.com', -]; - -$contactPerson = $client->contacts()->updateContactPerson('contact-id-123', 'person-id-456', $updateData); -``` - -#### Delete a Contact Person - -Delete a contact person. - -```php -$client->contacts()->deleteContactPerson('contact-id-123', 'person-id-456'); -``` - -### Notes - -#### Create a Note - -Add a note to a contact. - -```php -$noteData = [ - 'note' => 'Called about invoice #123', - 'todo' => true, -]; - -$note = $client->contacts()->createNote('contact-id-123', $noteData); -``` - -#### Delete a Note - -Delete a note from a contact. - -```php -$client->contacts()->deleteNote('contact-id-123', 'note-id-789'); -``` - -### Additional Charges - -#### Create an Additional Charge - -Create an additional charge for a contact. - -```php -$chargeData = [ - 'description' => 'Additional services', - 'price' => 100.00, - 'period' => '2023-01', -]; - -$additionalCharge = $client->contacts()->createAdditionalCharge('contact-id-123', $chargeData); -``` - -#### Get Additional Charges - -Get all additional charges for a contact. - -```php -$additionalCharges = $client->contacts()->getAdditionalCharges('contact-id-123'); -``` - -### Moneybird Payments Mandate - -#### Get Payments Mandate - -Get the Moneybird payments mandate for a contact. - -```php -$mandate = $client->contacts()->getMbPaymentsMandate('contact-id-123'); -``` - -#### Create Payments Mandate - -Create a Moneybird payments mandate for a contact. - -```php -$mandate = $client->contacts()->createMbPaymentsMandate('contact-id-123'); -``` - -#### Create Payments Mandate URL - -Create a URL for setting up a Moneybird payments mandate. - -```php -$mandateUrl = $client->contacts()->createMbPaymentsMandateUrl('contact-id-123'); -``` - -#### Delete Payments Mandate - -Delete a Moneybird payments mandate. - -```php -$client->contacts()->deleteMbPaymentsMandate('contact-id-123'); -``` - -## Contact Properties - -When working with contacts, you'll have access to the following properties: - -| Property | Type | Description | -|----------|------|-------------| -| id | string | Unique identifier | -| administration_id | string | Administration ID | -| company_name | string | Company name | -| firstname | string | First name | -| lastname | string | Last name | -| address1 | string | Address line 1 | -| address2 | string | Address line 2 | -| zipcode | string | Postal code | -| city | string | City | -| country | string | Country code | -| phone | string | Phone number | -| delivery_method | string | Delivery method | -| customer_id | string | Customer ID | -| tax_number | string | Tax number | -| chamber_of_commerce | string | Chamber of commerce number | -| bank_account | string | Bank account | -| attention | string | Attention | -| email | string | Email address | -| email_ubl | boolean | Send UBL with email | -| sepa_active | boolean | SEPA active | -| sepa_iban | string | SEPA IBAN | -| sepa_iban_account_name | string | SEPA IBAN account name | -| sepa_bic | string | SEPA BIC | -| sepa_mandate_id | string | SEPA mandate ID | -| sepa_mandate_date | string | SEPA mandate date | -| moneybird_payments_mandate | boolean | Moneybird payments mandate active | -| created_at | string | Creation timestamp | -| updated_at | string | Last update timestamp | -| version | integer | Version number | -| notes | array | Contact notes | -| custom_fields | array | Custom fields | -| contact_people | array | Contact people | -| archived | boolean | Whether the contact is archived | - -> **Note:** See the [official API reference](https://developer.moneybird.com/api/contacts/#contacts-object) for the complete list of available properties. - -## Further reading - -- Read [the full API reference](https://developer.moneybird.com/api/contacts/) in the Moneybird developer docs diff --git a/docs/src/content/docs/reference/contacts.md b/docs/src/content/docs/reference/contacts.md index 5d3e45f..9a4097e 100644 --- a/docs/src/content/docs/reference/contacts.md +++ b/docs/src/content/docs/reference/contacts.md @@ -7,7 +7,7 @@ Manage your contacts in Moneybird. ## Working with Contacts -This section covers how to interact with Moneybird's Contacts API. You can create, retrieve, update, and delete contacts, as well as manage contact people, notes, usage charges, and payment mandates. +This section covers how to interact with Moneybird's Contacts API. You can create, retrieve, update, and delete contacts, as well as manage contact people, notes, additional charges, and payment mandates. ### Basic Operations @@ -180,11 +180,11 @@ Delete a note from a contact. $client->contacts()->deleteNote('contact-id-123', 'note-id-789'); ``` -### Usage Charges +### Additional Charges -#### Create a Usage Charge +#### Create an Additional Charge -Create a usage charge for a contact. +Create an additional charge for a contact. ```php $chargeData = [ @@ -193,15 +193,15 @@ $chargeData = [ 'period' => '2023-01', ]; -$usageCharge = $client->contacts()->createUsageCharge('contact-id-123', $chargeData); +$additionalCharge = $client->contacts()->createAdditionalCharge('contact-id-123', $chargeData); ``` -#### Get Usage Charges +#### Get Additional Charges -Get all usage charges for a contact. +Get all additional charges for a contact. ```php -$usageCharges = $client->contacts()->getUsageCharges('contact-id-123'); +$additionalCharges = $client->contacts()->getAdditionalCharges('contact-id-123'); ``` ### Moneybird Payments Mandate diff --git a/docs/src/content/docs/reference/estimates.md b/docs/src/content/docs/reference/estimates.md index b3b1f65..0081103 100644 --- a/docs/src/content/docs/reference/estimates.md +++ b/docs/src/content/docs/reference/estimates.md @@ -32,6 +32,14 @@ foreach ($estimates as $estimate) { } ``` +#### Get All Estimates + +Get all estimates as an array (fetches all pages). + +```php +$estimates = $client->estimates()->all(); +``` + #### Create an Estimate Create a new estimate. @@ -119,6 +127,14 @@ Create a duplicate of an existing estimate. $duplicateEstimate = $client->estimates()->duplicate('123456789'); ``` +#### Get Synchronization List + +Get a list of estimate IDs and version timestamps for synchronization. + +```php +$syncList = $client->estimates()->synchronization(); +``` + #### Synchronize Estimates Synchronize a list of estimates by their IDs. diff --git a/docs/src/content/docs/reference/external-sales-invoice-attachments.md b/docs/src/content/docs/reference/external-sales-invoice-attachments.md index b360549..bdcc49b 100644 --- a/docs/src/content/docs/reference/external-sales-invoice-attachments.md +++ b/docs/src/content/docs/reference/external-sales-invoice-attachments.md @@ -20,7 +20,7 @@ $externalSalesInvoiceId = '123456789'; $filePath = '/path/to/your/file.pdf'; $fileName = 'invoice.pdf'; -$success = $client->externalSalesInvoiceAttachments()->createForExternalSalesInvoiceId( +$success = $client->externalSalesInvoices()->attachments()->createForExternalSalesInvoiceId( $externalSalesInvoiceId, $filePath, $fileName diff --git a/docs/src/content/docs/reference/external-sales-invoice-payments.md b/docs/src/content/docs/reference/external-sales-invoice-payments.md index 1eacc09..d493bb7 100644 --- a/docs/src/content/docs/reference/external-sales-invoice-payments.md +++ b/docs/src/content/docs/reference/external-sales-invoice-payments.md @@ -25,7 +25,7 @@ $data = [ 'transaction_identifier' => 'TRANSACTION123' ]; -$payment = $client->externalSalesInvoicePayments()->createForExternalSalesInvoiceId( +$payment = $client->externalSalesInvoices()->payments()->createForExternalSalesInvoiceId( $externalSalesInvoiceId, $data ); @@ -41,7 +41,7 @@ Remove a payment from an external sales invoice. $externalSalesInvoiceId = '123456789'; $paymentId = '987654321'; -$client->externalSalesInvoicePayments()->deleteForExternalSalesInvoiceId( +$client->externalSalesInvoices()->payments()->deleteForExternalSalesInvoiceId( $externalSalesInvoiceId, $paymentId ); diff --git a/docs/src/content/docs/reference/external-sales-invoices.md b/docs/src/content/docs/reference/external-sales-invoices.md index f533678..a0363bf 100644 --- a/docs/src/content/docs/reference/external-sales-invoices.md +++ b/docs/src/content/docs/reference/external-sales-invoices.md @@ -80,6 +80,14 @@ $client->externalSalesInvoices()->delete('123456789'); ### Specialized Features +#### Get Synchronization List + +Get a list of external sales invoice IDs and version timestamps for synchronization. + +```php +$syncList = $client->externalSalesInvoices()->getSynchronization(); +``` + #### Synchronize External Sales Invoices Synchronize a list of external sales invoices by their IDs. @@ -98,18 +106,15 @@ Access the attachments endpoint for an external sales invoice. $attachmentsEndpoint = $client->externalSalesInvoices()->attachments(); // Upload an attachment -$attachment = $attachmentsEndpoint->create('123456789', [ - 'filename' => 'invoice.pdf', - 'content' => base64_encode(file_get_contents('path/to/invoice.pdf')) -]); - -// Get an attachment -$attachment = $attachmentsEndpoint->get('123456789', 'attachment_id'); - -// Delete an attachment -$attachmentsEndpoint->delete('123456789', 'attachment_id'); +$success = $attachmentsEndpoint->createForExternalSalesInvoiceId( + '123456789', + '/path/to/invoice.pdf', + 'invoice.pdf' +); ``` +See [External Sales Invoice Attachments](/reference/external-sales-invoice-attachments/) for more details. + #### Working with Payments Access the payments endpoint for an external sales invoice. @@ -119,16 +124,18 @@ Access the payments endpoint for an external sales invoice. $paymentsEndpoint = $client->externalSalesInvoices()->payments(); // Create a payment -$payment = $paymentsEndpoint->create('123456789', [ +$payment = $paymentsEndpoint->createForExternalSalesInvoiceId('123456789', [ 'payment_date' => '2025-03-05', 'price' => '200.00', - 'payment_method' => 'bank_transfer' + 'financial_account_id' => '987654321', ]); // Delete a payment -$paymentsEndpoint->delete('123456789', 'payment_id'); +$paymentsEndpoint->deleteForExternalSalesInvoiceId('123456789', 'payment_id'); ``` +See [External Sales Invoice Payments](/reference/external-sales-invoice-payments/) for more details. + ## External Sales Invoice Properties When working with external sales invoices, you'll have access to the following properties: diff --git a/docs/src/content/docs/reference/financial-mutations.md b/docs/src/content/docs/reference/financial-mutations.md index 2ec62b8..34811d1 100644 --- a/docs/src/content/docs/reference/financial-mutations.md +++ b/docs/src/content/docs/reference/financial-mutations.md @@ -73,6 +73,14 @@ $linkData = [ $financialMutation = $client->financialMutations()->linkBooking('123456789', $linkData); ``` +#### Get Synchronization List + +Get a list of financial mutation IDs and version timestamps for synchronization. + +```php +$syncList = $client->financialMutations()->synchronization(); +``` + #### Synchronize Financial Mutations Synchronize a list of financial mutations by their IDs. diff --git a/docs/src/content/docs/reference/financial-statements.md b/docs/src/content/docs/reference/financial-statements.md index 47c693a..c91ef39 100644 --- a/docs/src/content/docs/reference/financial-statements.md +++ b/docs/src/content/docs/reference/financial-statements.md @@ -83,6 +83,14 @@ $client->financialStatements()->delete('123456789'); ### Specialized Features +#### Get Synchronization List + +Get a list of financial statement IDs and version timestamps for synchronization. + +```php +$syncList = $client->financialStatements()->synchronization(); +``` + #### Synchronize Financial Statements Synchronize a list of financial statements by their IDs. diff --git a/docs/src/content/docs/reference/general-documents.md b/docs/src/content/docs/reference/general-documents.md index ad47e8d..c082098 100644 --- a/docs/src/content/docs/reference/general-documents.md +++ b/docs/src/content/docs/reference/general-documents.md @@ -112,6 +112,14 @@ $client->generalDocuments()->deleteAttachment('123456789', 'attachment_id'); ### Specialized Features +#### Get Synchronization List + +Get a list of general document IDs and version timestamps for synchronization. + +```php +$syncList = $client->generalDocuments()->synchronization(); +``` + #### Synchronize General Documents Synchronize a list of general documents by their IDs. diff --git a/docs/src/content/docs/reference/general-journal-documents.md b/docs/src/content/docs/reference/general-journal-documents.md index a37ce75..bad97cd 100644 --- a/docs/src/content/docs/reference/general-journal-documents.md +++ b/docs/src/content/docs/reference/general-journal-documents.md @@ -116,6 +116,14 @@ $client->generalJournalDocuments()->deleteAttachment('123456789', 'attachment_id ### Specialized Features +#### Get Synchronization List + +Get a list of general journal document IDs and version timestamps for synchronization. + +```php +$syncList = $client->generalJournalDocuments()->synchronization(); +``` + #### Synchronize General Journal Documents Synchronize a list of general journal documents by their IDs. diff --git a/docs/src/content/docs/reference/sales-invoices.md b/docs/src/content/docs/reference/sales-invoices.md index 62b1579..0738519 100644 --- a/docs/src/content/docs/reference/sales-invoices.md +++ b/docs/src/content/docs/reference/sales-invoices.md @@ -147,6 +147,14 @@ Send an invoice reminder. $salesInvoice = $client->salesInvoices()->sendInvoiceReminder('123456789'); ``` +#### Get Invoice Reminder Template + +Get the invoice reminder template for a sales invoice. + +```php +$invoiceReminderTemplate = $client->salesInvoices()->getInvoiceReminderTemplate('123456789'); +``` + #### Send Payment Reminder Send a payment reminder. @@ -155,6 +163,14 @@ Send a payment reminder. $salesInvoice = $client->salesInvoices()->sendPaymentReminder('123456789'); ``` +#### Get Payment Reminder Template + +Get the payment reminder template for a sales invoice. + +```php +$paymentReminderTemplate = $client->salesInvoices()->getPaymentReminderTemplate('123456789'); +``` + #### Send by Post Send the sales invoice by post. diff --git a/openapi-specs/openapi-2026-07-12.yml b/openapi-specs/openapi-2026-07-12.yml new file mode 100644 index 0000000..8d9672c --- /dev/null +++ b/openapi-specs/openapi-2026-07-12.yml @@ -0,0 +1,54818 @@ +openapi: 3.1.0 +info: + title: Moneybird API + description: The Moneybird API allows you to interact with a Moneybird account in a RESTful manner. For comprehensive and up-to-date information on authentication, endpoints, usage, webhooks, and best practices, please refer to the documentation at [developer.moneybird.com](https://developer.moneybird.com). All details, examples, and guides are available on their respective pages. + version: v2-20260710-57729b61b9 + termsOfService: https://www.moneybird.nl/terms/ + contact: + name: Moneybird + email: support@moneybird.com + url: https://developer.moneybird.com +servers: + - url: https://moneybird.com/api/v2 + description: Production server +security: + - bearerAuth: [] +tags: + - name: Administrations + description: |- + Administrations are the top level entities in Moneybird. Use the following endpoints to get + information about the administrations you have access to. + - name: Assets + description: |- + Assets are significant purchases, like company cars, laptops or furniture, that are used over + multiple years. They are recorded to manage depreciation and comply with tax regulations. + - name: Contacts + description: |- + Contacts are the entities in Moneybird that represent your customers, suppliers or other + business relations. Use the following endpoints to get information about contacts, create + new contacts or update existing contacts. + - name: Custom fields + description: Custom fields can be used to add extra information to sales invoices, contacts and identities. + - name: Customer contact portal + description: |- + The customer contact portal allows you to create temporary links to the customer contact + portal. Allowing your customers to view their invoices, subscriptions and other related information. + - name: Document styles + description: |- + Document styles are used to define the layout of documents, like invoices and estimates. You + can have multiple document styles for different purposes. + - name: Downloads + description: |- + Downloads are files that have been generated as exports from your administration. These can be + CSV exports of contacts, sales invoices, time entries, or various financial reports. Use these + endpoints to retrieve a list of available downloads and to download the files. + - name: 'Documents: General documents' + description: |- + General documents are documents that are not invoices, estimates, or other specific document + types. They can be used to store other financial documents. + - name: 'Documents: General journal documents' + description: |- + General journal documents are used for manual bookkeeping entries, to correct errors or make + adjustments. + - name: 'Documents: Purchase invoices' + description: Purchase invoices are invoices you receive from your suppliers. + - name: 'Documents: Receipts' + description: Receipts are proofs of payment for expenses. + - name: 'Documents: Typeless documents' + description: |- + Typeless documents are documents of which the type is not yet known. For example, a document + uploaded via email or via the bulk uploader. It is not possible to update a typeless + document, except for adding attachments. You will need to set its type first. You cannot set + the type of typeless documents using the API yet, but you can do this via the website. + - name: Estimates + description: |- + Estimates (or quotes) are proposals for products or services that you can send to your + clients. + - name: External sales invoices + description: |- + External sales invoices are invoices created in other systems that you want to import into + Moneybird for a complete overview of your revenue. + - name: Financial accounts + description: |- + Financial accounts represent your bank accounts, credit cards, private withdrawals/deposits + and other payment services. They are used to track payments and financial mutations. + - name: Financial mutations + description: Financial mutations are the transactions on your financial accounts. + - name: Financial statements + description: |- + Financial statements are comprised of financial mutations that are booked on a financial + account. They provide a detailed record of all transactions for a specific account. + - name: Identities + description: |- + Identities are the different profiles or trade names under which you can send documents from + your administration. + - name: Ledger accounts + description: |- + Ledger accounts are the categories in your bookkeeping, like revenue, costs, assets, and + liabilities. + - name: Payments + description: Payments are records of money being transferred for invoices. + - name: Products + description: Products are the goods or services you sell. You can add them to invoices and estimates. + - name: Projects + description: |- + Projects allow you to group time entries and financials for specific projects you are working + on. + - name: Purchase transactions + description: Purchase transactions are outgoing payments you initiate from Moneybird + - name: Recurring sales invoices + description: |- + Recurring sales invoices are templates for invoices that are sent automatically at a + recurring interval. + - name: Reports + description: |- + Reports provide analytical data about your administration, such as revenue and expense + breakdowns by various dimensions like projects, contacts, or time periods. + - name: Sales invoices + description: |- + Sales invoices are the invoices you send to your customers for products or services you have + delivered. + - name: Subscription templates + description: Subscription templates define the products and prices for subscriptions. + - name: Subscriptions + description: |- + Subscriptions allow you to automatically invoice customers on a recurring basis for the + services you provide. + - name: Task lists + description: |- + Task lists help you organize and track work within an administration. They contain + groups of tasks that can be assigned to users and tracked for completion. + - name: Task list templates + description: |- + Task list templates are reusable blueprints for creating task lists with predefined + groups and tasks. + - name: Tax rates + description: Tax rates are the VAT tariffs that apply to your products and services. + - name: Time entries + description: |- + Time entries are used to track time spent on projects, which can then be billed to + customers. + - name: Users + description: |- + Administrations can have multiple users. Use the following endpoints to get information about + the users in an administration. + - name: Verifications + description: |- + Verifications are used to retrieve all verified information within an administration, such as + e-mail addresses, bank account numbers, Chamber of Commerce numbers, and tax numbers. + - name: Webhooks + description: |- + Webhooks are a way to subscribe to events that happen in Moneybird. When an event occurs, + Moneybird will send a POST request to the URL you provided. This way, you can keep your own + system in sync with Moneybird. + + For example, you can subscribe to the `contact_created` event to receive a notification when + a new contact is created in Moneybird. + + For a full list of available events and event groups, see the [webhook events documentation](https://developer.moneybird.com/webhooks/events). + - name: Workflows + description: |- + Workflows determine the settings of the invoice and estimate workflow. Use the following + to get information about the workflows in an administration. +paths: + /administrations{format}: + get: + summary: List all administrations + description: Lists all administrations the current user has access to. + tags: + - Administrations + security: + - bearerAuth: [] + parameters: + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of administrations + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/administration_response' + examples: + ValidatesThatAUserHasAccessToMultipleAdministrationsViaDifferentWays: + summary: Validates that a user has access to multiple administrations via different ways + value: + - id: '178368816782757849' + name: Administratie + language: nl + currency: EUR + country: NL + time_zone: Europe/Amsterdam + access: accountant_company + suspended: false + period_locked_until: null + period_start_date: '2026-01-01' + - id: 123 + name: Parkietje B.V. + language: nl + currency: EUR + country: NL + time_zone: Europe/Amsterdam + access: user + suspended: false + period_locked_until: null + period_start_date: '2026-01-01' + ReturnAListOfAdministrationsThatUserHasAccessTo: + summary: Return a list of administrations that user has access to + value: + - id: '178368816829667170' + name: Administratie + language: nl + currency: EUR + country: NL + time_zone: Europe/Amsterdam + access: user + suspended: false + period_locked_until: null + period_start_date: '2026-01-01' + - id: 123 + name: Parkietje B.V. + language: nl + currency: EUR + country: NL + time_zone: Europe/Amsterdam + access: user + suspended: false + period_locked_until: null + period_start_date: '2026-01-01' + ReturnsAccessTypeUserWhenHavingDirectAccessToTheAdministration: + summary: Returns access type user when having direct access to the administration + value: + - id: '178368816871623564' + name: Parkietje B.V. + language: nl + currency: EUR + country: NL + time_zone: Europe/Amsterdam + access: user + suspended: false + period_locked_until: null + period_start_date: '2026-01-01' + operationId: get_administrations + /{administration_id}/assets/{id}/disposals{format}: + post: + summary: Create a disposal + description: |- + Creates a disposal for the asset at the given date. + Requires the asset to not have a disposal already. + Furthermore, the asset must be fully depreciated so the value of the asset at the disposal date must be zero. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + date: + type: string + format: date + description: Has to be after the purchase date of the asset, and cannot be in the future or in the locked period of the administration. + reason: + type: string + enum: + - out_of_use + - sold + - private_withdrawal + - divested + required: + - date + - reason + examples: + AddsADisposal: + summary: Adds a disposal + value: + date: '2026-07-10' + reason: out_of_use + responses: + '201': + description: A disposal + content: + application/json: + schema: + $ref: '#/components/schemas/disposal_response' + examples: + AddsADisposal: + summary: Adds a disposal + value: + date: '2026-07-10' + reason: out_of_use + externally_booked: false + asset_id: '492272986227737770' + reinvestment_reserve_sale: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheReasonIsInvalid: + summary: Returns a 400 if the reason is invalid + value: + error: reason does not have a valid value + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422TheAssetIsNotInvalid: + summary: Returns a 422 the asset is not invalid + value: + error: + date: + - is invalid, asset is not fully depreciated on this date + details: + date: + - error: invalid_asset_not_fully_depreciated + operationId: post_administration_id_assets_id_disposals + /{administration_id}/assets/{id}/reinvestment_reserve_purchase{format}: + post: + summary: Create a reinvestment reserve purchase + description: |- + Records that part of the asset's purchase value is funded from the + reinvestment reserve ("herinvesteringsreserve"). The amount cannot exceed + the asset's depreciatable value (purchase value minus residual value), and + the asset's purchase date may not lie in the locked period. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + amount: + $ref: '#/components/schemas/number' + description: The amount taken from the reinvestment reserve. + required: + - amount + examples: + CreatesAReinvestmentReservePurchase: + summary: Creates a reinvestment reserve purchase + value: + amount: 100 + responses: + '201': + description: A reinvestment reserve purchase + content: + application/json: + schema: + $ref: '#/components/schemas/reinvestment_reserve_purchase_response' + examples: + CreatesAReinvestmentReservePurchase: + summary: Creates a reinvestment reserve purchase + value: + id: '492273001000076698' + amount: '100.0' + date: '2026-02-01' + asset_id: '492273000513537391' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheAmountIsNegative: + summary: Returns a 400 if the amount is negative + value: + error: Amount does not have a valid value + ReturnsA400IfTheAmountIsMissing: + summary: Returns a 400 if the amount is missing + value: + error: Amount is missing, Amount does not have a valid value + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheAmountExceedsTheDepreciatableValue: + summary: Returns a 422 if the amount exceeds the depreciatable value + value: + error: + amount: + - cannot exceed the purchase value minus the residual value + - cannot exceed the available reinvestment reserve + details: + amount: + - error: exceeds_depreciatable_value + - error: exceeds_available_reserve + operationId: post_administration_id_assets_id_reinvestment_reserve_purchase + delete: + summary: Delete a reinvestment reserve purchase + description: |- + Removes the reinvestment reserve purchase from the asset. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Reinvestment reserve purchase deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + ReturnsA404IfTheAssetHasNoReinvestmentReservePurchase: + summary: Returns a 404 if the asset has no reinvestment reserve purchase + value: + error: Not Found + operationId: delete_administration_id_assets_id_reinvestment_reserve_purchase + /{administration_id}/assets/{id}/reinvestment_reserve_sale{format}: + post: + summary: Create a reinvestment reserve sale + description: |- + Books the book result of the asset's disposal to the reinvestment reserve + ("herinvesteringsreserve"). Requires the asset to have a disposal already, + and the disposal date may not lie in the locked period. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + amount: + $ref: '#/components/schemas/number' + description: The amount of the book result booked to the reinvestment reserve. + required: + - amount + examples: + CreatesAReinvestmentReserveSale: + summary: Creates a reinvestment reserve sale + value: + amount: 100 + responses: + '201': + description: A reinvestment reserve sale + content: + application/json: + schema: + $ref: '#/components/schemas/reinvestment_reserve_sale_response' + examples: + CreatesAReinvestmentReserveSale: + summary: Creates a reinvestment reserve sale + value: + id: '492272990029874630' + amount: '100.0' + date: '2026-07-10' + disposal_id: '492272989999465918' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheAmountIsNegative: + summary: Returns a 400 if the amount is negative + value: + error: Amount does not have a valid value + ReturnsA400IfTheAmountIsMissing: + summary: Returns a 400 if the amount is missing + value: + error: Amount is missing, Amount does not have a valid value + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheAssetHasNoDisposal: + summary: Returns a 422 if the asset has no disposal + value: + error: Asset has no disposal + operationId: post_administration_id_assets_id_reinvestment_reserve_sale + delete: + summary: Delete a reinvestment reserve sale + description: |- + Removes the reinvestment reserve sale from the asset's disposal. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Reinvestment reserve sale deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetHasNoDisposal: + summary: Returns a 404 if the asset has no disposal + value: + error: Not Found + ReturnsA404IfTheAssetSDisposalHasNoReinvestmentReserveSale: + summary: Returns a 404 if the asset's disposal has no reinvestment reserve sale + value: + error: Not Found + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + operationId: delete_administration_id_assets_id_reinvestment_reserve_sale + /{administration_id}/assets/{id}/sources/{source_id}{format}: + delete: + summary: Delete a source + description: |- + Deletes a source from an asset. Does not delete the detail or the asset + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: source_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Source deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheSourceDoesNotExist: + summary: Returns a 404 if the source does not exist + value: + error: 'Record not found for model name: Source' + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + operationId: delete_administration_id_assets_id_sources_source_id + /{administration_id}/assets/{id}/sources{format}: + post: + summary: Add a source to an asset + description: |- + Adds a detail or general journal document entry as a source to an asset. + The booking must have the same ledger account as the asset. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + oneOf: + - required: + - detail_id + properties: + detail_id: + $ref: '#/components/schemas/identifier' + - required: + - general_journal_document_entry_id + properties: + general_journal_document_entry_id: + $ref: '#/components/schemas/identifier' + examples: + CreatesANewDetailSource: + summary: Creates a new detail source + value: + detail_id: 492272992742541000 + CreatesANewGeneralJournalDocumentSource: + summary: Creates a new general journal document source + value: + general_journal_document_entry_id: 492272994163361600 + responses: + '201': + description: A detail that is added as a source to an asset + content: + application/json: + schema: + $ref: '#/components/schemas/source_response' + examples: + CreatesANewDetailSource: + summary: Creates a new detail source + value: + id: '492272992758269608' + asset_id: '492272992302139003' + detail_id: '492272992742540967' + CreatesANewGeneralJournalDocumentSource: + summary: Creates a new general journal document source + value: + id: '492272994178041651' + asset_id: '492272993740785414' + general_journal_document_entry_id: '492272994163361586' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheDetailIdIsNotAInteger: + summary: Returns a 400 if the detail id is not a integer + value: + error: detail_id is invalid + ReturnsA400IfTheGeneralJournalDocumentEntryIdIsNotAnInteger: + summary: Returns a 400 if the general journal document entry id is not an integer + value: + error: general_journal_document_entry_id is invalid + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheDetailIsNotValid: + summary: Returns a 422 if the detail is not valid + value: + error: + booking: + - The ledger account of the source must be equal to the ledger account of the asset + details: + booking: + - error: not_equal_to_asset_ledger_account + ReturnsA422IfTheEntryHasADifferentLedgerAccountThanTheAsset: + summary: Returns a 422 if the entry has a different ledger account than the asset + value: + error: + booking: + - The ledger account of the source must be equal to the ledger account of the asset + details: + booking: + - error: not_equal_to_asset_ledger_account + operationId: post_administration_id_assets_id_sources + /{administration_id}/assets/{id}/value_changes/arbitrary{format}: + post: + summary: Create an arbitrary value change + description: |- + Creates an arbitrary value change for the asset at the given date. + If the amount is larger than the value of the asset at the given date, a 422 error will be returned. + Any existing linear value changes after the given date will be removed. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + date: + type: string + format: date + description: Has to be after the purchase date of the asset, and cannot be in the future or in the locked period of the administration. + amount: + $ref: '#/components/schemas/number' + description: Note that a negative amount means the asset decreases in value while a positive amount means the asset increases in value. + description: + type: string + externally_booked: + type: boolean + description: Set to true if the value change is already externally booked and doesn't need to be booked by Moneybird. + default: false + required: + - date + - amount + - description + examples: + AddsAArbitraryValueChange: + summary: Adds a arbitrary value change + value: + date: '2026-07-10' + amount: -10 + externally_booked: true + description: some description + responses: + '201': + description: A value change + content: + application/json: + schema: + $ref: '#/components/schemas/value_change_response' + examples: + AddsAArbitraryValueChange: + summary: Adds a arbitrary value change + value: + type: arbitrary + date: '2026-07-10' + amount: '-10.0' + description: some description + externally_booked: true + asset_id: '492273006191576951' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheDateIsNotAValidDate: + summary: Returns a 400 if the date is not a valid date + value: + error: Date is invalid + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheValueChangeIsInvalid: + summary: Returns a 422 if the value change is invalid + value: + error: + date: + - can not be before the commissioning date of the asset + details: + date: + - error: cannot_be_before_purchase_date + operationId: post_administration_id_assets_id_value_changes_arbitrary + /{administration_id}/assets/{id}/value_changes/divestment{format}: + post: + summary: Create a divestment value change + description: |- + Creates a divestment value change for the asset at the given date. + The remaining value of the asset will be taken from the balance sheet and the profit will be booked as book result. + The amount of the value change will automatically be set to the value of the asset at the given date. + If the value change is created successfully, a disposal will be created for the asset. + Any existing linear value changes after the given date will be removed. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + date: + type: string + format: date + description: Has to be after the purchase date of the asset, and cannot be in the future or in the locked period of the administration. + required: + - date + examples: + AddsADivestmentValueChange: + summary: Adds a divestment value change + value: + date: '2026-07-10' + responses: + '201': + description: A value change + content: + application/json: + schema: + $ref: '#/components/schemas/value_change_response' + examples: + AddsADivestmentValueChange: + summary: Adds a divestment value change + value: + type: divestment + date: '2026-07-10' + amount: '-12145.67' + description: null + externally_booked: false + asset_id: '492272985440257131' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheDateIsNotAValidDate: + summary: Returns a 400 if the date is not a valid date + value: + error: Date is invalid + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheValueChangeIsInvalid: + summary: Returns a 422 if the value change is invalid + value: + error: + date: + - can not be before the commissioning date of the asset + - must be after the last arbitrary depreciation + details: + date: + - error: cannot_be_before_purchase_date + - error: after_arbitrary_changes + operationId: post_administration_id_assets_id_value_changes_divestment + /{administration_id}/assets/{id}/value_changes/full_depreciation{format}: + post: + summary: Create a full depreciation value change + description: |- + Creates a full depreciation value change for the asset at the given date. + The remaining value of the asset will be taken from the balance sheet. + The amount of the value change will automatically be set to the value of the asset at the given date. + If the value change is created successfully, a disposal will be created for the asset. + Any existing linear value changes after the given date will be removed. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + date: + type: string + format: date + description: Has to be after the purchase date of the asset, and cannot be in the future or in the locked period of the administration. + description: + type: string + required: + - date + - description + examples: + AddsAFullDepreciationValueChange: + summary: Adds a full depreciation value change + value: + date: '2026-07-10' + description: some description + responses: + '201': + description: A value change + content: + application/json: + schema: + $ref: '#/components/schemas/value_change_response' + examples: + AddsAFullDepreciationValueChange: + summary: Adds a full depreciation value change + value: + type: full_depreciation + date: '2026-07-10' + amount: '-12145.67' + description: some description + externally_booked: false + asset_id: '492272999969326381' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheDateIsNotAValidDate: + summary: Returns a 400 if the date is not a valid date + value: + error: Date is invalid + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheValueChangeIsInvalid: + summary: Returns a 422 if the value change is invalid + value: + error: + date: + - can not be before the commissioning date of the asset + - must be after the last arbitrary depreciation + details: + date: + - error: cannot_be_before_purchase_date + - error: after_arbitrary_changes + operationId: post_administration_id_assets_id_value_changes_full_depreciation + /{administration_id}/assets/{id}/value_changes/manual{format}: + post: + summary: Create a manual value change + description: |- + Creates a manual value change for the asset at the given date. + If the amount is larger than the value of the asset at the given date, a 422 error will be returned. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + date: + type: string + format: date + description: Has to be after the purchase date of the asset, and cannot be in the future or in the locked period of the administration. + amount: + $ref: '#/components/schemas/number' + description: Note that a negative amount means the asset decreases in value while a positive amount means the asset increases in value. + description: + type: string + externally_booked: + type: boolean + description: Set to true if the value change is already externally booked and doesn't need to be booked by Moneybird. + default: false + required: + - date + - amount + - description + examples: + AddsAManualValueChange: + summary: Adds a manual value change + value: + date: '2026-07-10' + amount: -10 + externally_booked: true + description: some description + responses: + '201': + description: A value change + content: + application/json: + schema: + $ref: '#/components/schemas/value_change_response' + examples: + AddsAManualValueChange: + summary: Adds a manual value change + value: + type: manual + date: '2026-07-10' + amount: '-10.0' + description: some description + externally_booked: true + asset_id: '492273002503734823' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheDateIsNotAValidDate: + summary: Returns a 400 if the date is not a valid date + value: + error: Date is invalid + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheValueChangeIsInvalid: + summary: Returns a 422 if the value change is invalid + value: + error: + date: + - can not be before the commissioning date of the asset + details: + date: + - error: cannot_be_before_purchase_date + operationId: post_administration_id_assets_id_value_changes_manual + /{administration_id}/assets/{id}/value_changes/retroactive_linear_value_changes{format}: + post: + summary: Create linear value changes retroactively + description: |- + Creates linear value changes that were not created yet. + Use this if a new asset has just been created or if an arbitrary value change was created and the missing linear value changes need to be recalculated and recreated. + This will create missing value changes for all months between the purchase date of the asset or the date of the last arbitrary value change and the last month of the administration. + Requires a asset with a value change plan (so no assets that belong to a land or building category). + Also requires that the asset has remaining value, has missing value changes at the end of some months and that all missing linear value changes are outside the locked period. + This process will be performed asynchronously so no result will be returned. Use `Get /assets/:id` to check the result after a while. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + $ref: '#/components/responses/204_no_content' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheAssetIsNotValidWithRetroactiveValueChangesScope: + summary: Returns a 422 if the asset is not valid with retroactive value changes scope + value: + error: The value change plan of the asset is not active + ReturnsA422IfTheAssetHasNoValueChangePlan: + summary: Returns a 422 if the asset has no value change plan + value: + error: Asset has no value change plan + operationId: post_administration_id_assets_id_value_changes_retroactive_linear_value_changes + /{administration_id}/assets/{id}{format}: + get: + summary: Get an asset by ID + description: |- + Returns the asset with the given ID. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: An asset + content: + application/json: + schema: + $ref: '#/components/schemas/asset_response' + examples: + ReturnsTheAssetWithADisposal: + summary: Returns the asset with a disposal + value: + id: '492272987569915144' + ledger_account_id: '492272987563623687' + name: Asset 1 + purchase_date: '2020-07-10' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '0.0' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: false + monthly_depreciation: '205.59' + disposal: + date: '2026-07-10' + reason: out_of_use + externally_booked: false + asset_id: '492272987569915144' + reinvestment_reserve_sale: null + value_changes: + - type: manual + date: '2026-07-10' + amount: '-12345.67' + description: Depreciation + externally_booked: false + asset_id: '492272987569915144' + sources: [] + reinvestment_reserve_purchase: null + ReturnsTheAsset: + summary: Returns the asset + value: + id: '492272988016608549' + ledger_account_id: '492272988010317092' + name: Asset 1 + purchase_date: '2026-02-01' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '12145.67' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: true + monthly_depreciation: '216.71' + disposal: null + value_changes: + - type: arbitrary + date: '2026-03-01' + amount: '-50.0' + description: Value change 1 + externally_booked: false + asset_id: '492272988016608549' + - type: arbitrary + date: '2026-04-01' + amount: '-50.0' + description: Value change 2 + externally_booked: false + asset_id: '492272988016608549' + - type: arbitrary + date: '2026-05-01' + amount: '-50.0' + description: Value change 3 + externally_booked: false + asset_id: '492272988016608549' + - type: arbitrary + date: '2026-06-01' + amount: '-50.0' + description: Value change 4 + externally_booked: false + asset_id: '492272988016608549' + sources: [] + reinvestment_reserve_purchase: null + ExposesCalculatedPurchaseValueReducedByTheAppliedReinvestmentReservePurchase: + summary: Exposes calculated purchase value reduced by the applied reinvestment reserve purchase + value: + id: '492272988582839638' + ledger_account_id: '492272988574451029' + name: Asset 1 + purchase_date: '2026-02-01' + purchase_value: '1000.0' + calculated_purchase_value: '700.0' + current_value: '700.0' + value_change_plan: null + disposal: null + value_changes: [] + sources: [] + reinvestment_reserve_purchase: + id: '492272988600665432' + amount: '300.0' + date: '2026-02-01' + asset_id: '492272988582839638' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + operationId: get_administration_id_assets_id + patch: + summary: Update an asset + description: |- + Updates the asset with the given ID. + If the asset is active (the purchase date is in the past), only the `name` can be updated. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + asset: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: The name of the asset + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account + purchase_date: + type: string + description: The purchase date of the asset + purchase_value: + $ref: '#/components/schemas/number' + description: The purchase value of the asset + value_change_plan_attributes: + unevaluatedProperties: false + properties: + lifespan_in_years: + $ref: '#/components/schemas/number' + description: The lifespan of the asset in years + residual_value: + $ref: '#/components/schemas/number' + description: The residual value of the asset at the end of the lifespan + required: + - asset + examples: + UpdatesTheAsset: + summary: Updates the asset + value: + asset: + name: New Name + AllowsUpdatingEveryAttributeOfAPlannedAsset: + summary: Allows updating every attribute of a planned asset + value: + asset: + name: New Name + ledger_account_id: 492273005057017600 + purchase_date: '2026-07-10' + purchase_value: 10000 + value_change_plan_attributes: + lifespan_in_years: 10 + residual_value: 500 + responses: + '200': + description: Asset updated + content: + application/json: + schema: + $ref: '#/components/schemas/asset_response' + examples: + UpdatesTheAsset: + summary: Updates the asset + value: + id: '492273004096521911' + ledger_account_id: '492273004089181878' + name: New Name + purchase_date: '2026-02-01' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '12145.67' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: true + monthly_depreciation: '216.71' + disposal: null + value_changes: + - type: arbitrary + date: '2026-03-01' + amount: '-50.0' + description: Value change 1 + externally_booked: false + asset_id: '492273004096521911' + - type: arbitrary + date: '2026-04-01' + amount: '-50.0' + description: Value change 2 + externally_booked: false + asset_id: '492273004096521911' + - type: arbitrary + date: '2026-05-01' + amount: '-50.0' + description: Value change 3 + externally_booked: false + asset_id: '492273004096521911' + - type: arbitrary + date: '2026-06-01' + amount: '-50.0' + description: Value change 4 + externally_booked: false + asset_id: '492273004096521911' + sources: [] + reinvestment_reserve_purchase: null + AllowsUpdatingEveryAttributeOfAPlannedAsset: + summary: Allows updating every attribute of a planned asset + value: + id: '492273005068551953' + ledger_account_id: '492273005057017615' + name: New Name + purchase_date: '2026-07-10' + purchase_value: '10000.0' + calculated_purchase_value: '10000.0' + current_value: '10000.0' + value_change_plan: + lifespan_in_years: 10 + residual_value: '500.0' + active: true + monthly_depreciation: '79.17' + disposal: null + value_changes: [] + sources: [] + reinvestment_reserve_purchase: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheInputAttributesAreInvalid: + summary: Returns a 400 if the input attributes are invalid + value: + error: asset[purchase_value] does not have a valid value + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfAnActiveAssetGetsAnInvalidAttributeUpdate: + summary: Returns a 422 if an active asset gets an invalid attribute update + value: + error: + base: + - Cannot update asset when it has value changes + details: + base: + - error: cannot_update_with_value_changes + operationId: patch_administration_id_assets_id + delete: + summary: Delete an asset + description: |- + Deletes the asset with the given ID. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Asset deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheAssetDoesNotExist: + summary: Returns a 404 if the asset does not exist + value: + error: 'Record not found for model name: asset' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheAssetIsInTheLockedPeriod: + summary: Returns a 422 if the asset is in the locked period + value: + error: Asset cannot be deleted because there are journal entries in the locked period of the administration. + operationId: delete_administration_id_assets_id + /{administration_id}/assets{format}: + get: + summary: List all assets + description: |- + Returns a list of all assets. + The list is paginated. Use the `per_page` and `page` parameters to control the pagination. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: ledger_account_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + description: Filter on the ID of the ledger account + examples: + ReturnsAListOfAssetsFilteredByLedgerAccount: + summary: Returns a list of assets filtered by ledger account + value: '492273007567308779' + - name: active + in: query + required: false + schema: + type: + - boolean + - string + default: true + description: Whether to include only active assets + examples: + ReturnsAListOfAllAssets: + summary: Returns a list of all assets + value: 'false' + - $ref: '#/components/parameters/per_page' + - $ref: '#/components/parameters/page' + responses: + '200': + description: A list of assets + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/asset_response' + examples: + ReturnsAListOfAssetsFilteredByLedgerAccount: + summary: Returns a list of assets filtered by ledger account + value: + - id: '492273007574648812' + ledger_account_id: '492273007567308779' + name: Asset 3 + purchase_date: '2026-02-01' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '12145.67' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: true + monthly_depreciation: '216.71' + disposal: null + value_changes: + - type: arbitrary + date: '2026-03-01' + amount: '-50.0' + description: Value change 1 + externally_booked: false + asset_id: '492273007574648812' + - type: arbitrary + date: '2026-04-01' + amount: '-50.0' + description: Value change 2 + externally_booked: false + asset_id: '492273007574648812' + - type: arbitrary + date: '2026-05-01' + amount: '-50.0' + description: Value change 3 + externally_booked: false + asset_id: '492273007574648812' + - type: arbitrary + date: '2026-06-01' + amount: '-50.0' + description: Value change 4 + externally_booked: false + asset_id: '492273007574648812' + sources: [] + reinvestment_reserve_purchase: null + ReturnsAListOfAllAssets: + summary: Returns a list of all assets + value: + - id: '492273008050701334' + ledger_account_id: '492273008044409877' + name: Asset 1 + purchase_date: '2026-02-01' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '12145.67' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: true + monthly_depreciation: '216.71' + disposal: null + value_changes: + - type: arbitrary + date: '2026-03-01' + amount: '-50.0' + description: Value change 1 + externally_booked: false + asset_id: '492273008050701334' + - type: arbitrary + date: '2026-04-01' + amount: '-50.0' + description: Value change 2 + externally_booked: false + asset_id: '492273008050701334' + - type: arbitrary + date: '2026-05-01' + amount: '-50.0' + description: Value change 3 + externally_booked: false + asset_id: '492273008050701334' + - type: arbitrary + date: '2026-06-01' + amount: '-50.0' + description: Value change 4 + externally_booked: false + asset_id: '492273008050701334' + sources: [] + reinvestment_reserve_purchase: null + - id: '492273008518366274' + ledger_account_id: '492273008512074817' + name: Asset 2 + purchase_date: '2020-07-10' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '0.0' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: false + monthly_depreciation: '205.59' + disposal: + date: '2026-07-10' + reason: out_of_use + externally_booked: false + asset_id: '492273008518366274' + reinvestment_reserve_sale: null + value_changes: + - type: manual + date: '2026-07-10' + amount: '-12345.67' + description: Depreciation + externally_booked: false + asset_id: '492273008518366274' + sources: [] + reinvestment_reserve_purchase: null + ReturnsAPaginatedListOfAssets: + summary: Returns a paginated list of assets + value: + - id: '492273009392878729' + ledger_account_id: '492273009386587272' + name: Asset 2 + purchase_date: '2020-07-10' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '0.0' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: false + monthly_depreciation: '205.59' + disposal: + date: '2026-07-10' + reason: out_of_use + externally_booked: false + asset_id: '492273009392878729' + reinvestment_reserve_sale: null + value_changes: + - type: manual + date: '2026-07-10' + amount: '-12345.67' + description: Depreciation + externally_booked: false + asset_id: '492273009392878729' + sources: [] + reinvestment_reserve_purchase: null + ReturnsAListOfActiveAssets: + summary: Returns a list of active assets + value: + - id: '492273009779803300' + ledger_account_id: '492273009773511843' + name: Asset 1 + purchase_date: '2026-02-01' + purchase_value: '12345.67' + calculated_purchase_value: '12345.67' + current_value: '12145.67' + value_change_plan: + lifespan_in_years: 5 + residual_value: '10.0' + active: true + monthly_depreciation: '216.71' + disposal: null + value_changes: + - type: arbitrary + date: '2026-03-01' + amount: '-50.0' + description: Value change 1 + externally_booked: false + asset_id: '492273009779803300' + - type: arbitrary + date: '2026-04-01' + amount: '-50.0' + description: Value change 2 + externally_booked: false + asset_id: '492273009779803300' + - type: arbitrary + date: '2026-05-01' + amount: '-50.0' + description: Value change 3 + externally_booked: false + asset_id: '492273009779803300' + - type: arbitrary + date: '2026-06-01' + amount: '-50.0' + description: Value change 4 + externally_booked: false + asset_id: '492273009779803300' + sources: [] + reinvestment_reserve_purchase: null + operationId: get_administration_id_assets + post: + summary: Create a new asset + description: |- + Creates a new asset. + + ### Required scope(s) + `documents` + tags: + - Assets + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + unevaluatedProperties: false + properties: + asset: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: The name of the asset + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account + purchase_date: + type: string + description: The purchase date of the asset + purchase_value: + $ref: '#/components/schemas/number' + description: The purchase value of the asset + value_change_plan_attributes: + unevaluatedProperties: false + properties: + lifespan_in_years: + $ref: '#/components/schemas/number' + description: The lifespan of the asset in years + residual_value: + $ref: '#/components/schemas/number' + description: The residual value of the asset at the end of the lifespan + default: 0 + required: + - lifespan_in_years + required: + - name + - ledger_account_id + - purchase_date + - purchase_value + - value_change_plan_attributes + examples: + CreatesANewAsset: + summary: Creates a new asset + value: + asset: + name: Test Asset + ledger_account_id: 492273003878418100 + purchase_date: '2026-07-10' + purchase_value: 1000 + value_change_plan_attributes: + lifespan_in_years: 5 + residual_value: 100 + responses: + '201': + description: Asset created + content: + application/json: + schema: + $ref: '#/components/schemas/asset_response' + examples: + CreatesANewAsset: + summary: Creates a new asset + value: + id: '492273003894146733' + ledger_account_id: '492273003878418092' + name: Test Asset + purchase_date: '2026-07-10' + purchase_value: '1000.0' + calculated_purchase_value: '1000.0' + current_value: '1000.0' + value_change_plan: + lifespan_in_years: 5 + residual_value: '100.0' + active: true + monthly_depreciation: '15.0' + disposal: null + value_changes: [] + sources: [] + reinvestment_reserve_purchase: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheRequestWhenParametersAreMissing: + summary: Returns a 400 if the request when parameters are missing + value: + error: asset[name] is missing + ReturnsA400IfTheParametersAreIncorrect: + summary: Returns a 400 if the parameters are incorrect + value: + error: asset[purchase_value] does not have a valid value, asset[value_change_plan_attributes][lifespan_in_years] does not have a valid value, asset[value_change_plan_attributes][residual_value] does not have a valid value + ReturnsA400IfThePurchaseDateIsNotAValidDate: + summary: Returns a 400 if the purchase date is not a valid date + value: + error: asset[purchase_date] is invalid + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheAssetIsNotValid: + summary: Returns a 422 if the asset is not valid + value: + error: + ledger_account: + - is invalid + details: + ledger_account: + - error: invalid + operationId: post_administration_id_assets + /{administration_id}/contacts/customer_id/{customer_id}{format}: + get: + summary: Get contact by customer id + description: |- + Returns all information about a contact by the given customer id + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: customer_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A contact + content: + application/json: + schema: + $ref: '#/components/schemas/contact_response' + examples: + ReturnAContact: + summary: Return a contact + value: + id: '492272854267594192' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:19.499Z' + updated_at: '2026-07-10T12:53:19.517Z' + version: 1783687999 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/3543817672af34a058361d08f0d3365fc2b834d5e63ad3704414d6fec4998a5f/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272854271788498' + contact_id: '492272854267594192' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:19.504Z' + updated_at: '2026-07-10T12:53:19.504Z' + version: 1783687999 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:19.511Z' + updated_at: '2026-07-10T12:53:19.511Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenContactDoesNotExist: + summary: Returns 404 when contact does not exist + value: + error: record not found + symbolic: + customer_id: not_found + operationId: get_administration_id_contacts_customer_id_customer_id + /{administration_id}/contacts/filter{format}: + get: + summary: Filter contacts + description: |- + Returns a paginated list of all contacts in the administration. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `first_name:henk,contact_type:company`). Any filter you pass replaces the defaults below entirely, so include every key you need. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | created_after | `String` | | Select contacts created after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | + | updated_after | `String` | | Select contacts updated after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | + | first_name | `String` | | Select contacts with the given first name. Case-insensitive | + | last_name | `String` | | Select contacts with the given last name. Case-insensitive | + | estimate_workflow_id | `Integer` | | Filters contacts by a single Estimate workflow | + | invoice_workflow_id | `Integer` | | Filters contacts by a single Invoice workflow | + | contact_type | `String` | | The contact type. Possible values `all`, `company`, `private_individual` | + | delivery_method | `String` | | The delivery method for invoices. Possible values. Possible values `all`, `email`, `post`, `manual`, `peppol`, `simplerinvoicing` | + | trusted_type | `String` | | Whether the contact is trusted. Possible values `all`, `trusted`, `not_trusted` | + schema: + type: string + examples: + ReturnsOnlyContactsUpdatedAfterGivenDatetime: + summary: Returns only contacts updated after given datetime + value: updated_after:2026-07-10 12:53:22 UTC + AllowsFilteringByFirstname: + summary: Allows filtering by firstname + value: first_name:piet + ReturnsAllContactsCreatedAfterGivenDatetime: + summary: Returns all contacts created after given datetime + value: created_after:2026-07-09 12:53:17 UTC + - name: query + in: query + required: false + description: Free-text search across name, contact people, email, phone, customer id, tax number, chamber of commerce, IBAN, and address fields. + schema: + type: string + - name: include_archived + in: query + required: false + schema: + type: + - boolean + - string + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of contacts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/contact_response' + examples: + ReturnsOnlyContactsUpdatedAfterGivenDatetime: + summary: Returns only contacts updated after given datetime + value: + - id: '492272852246987879' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: foo + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:17.572Z' + updated_at: '2026-07-10T12:54:22.616Z' + version: 1783688062 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/42adfeee0a8584f2783aab258d8f09442d839836bd4656429c50d42e2619b956/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272852251182185' + contact_id: '492272852246987879' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:17.577Z' + updated_at: '2026-07-10T12:53:17.577Z' + version: 1783687997 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:17.583Z' + updated_at: '2026-07-10T12:53:17.583Z' + AllowsFilteringByFirstname: + summary: Allows filtering by firstname + value: + - id: '492272852379108487' + administration_id: 123 + company_name: Relation 1 + firstname: Piet + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: contact1@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: contact1@example.com + send_estimates_to_attention: null + send_estimates_to_email: null + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:17.699Z' + updated_at: '2026-07-10T12:53:17.702Z' + version: 1783687997 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + events: [] + ReturnsAllContactsCreatedAfterGivenDatetime: + summary: Returns all contacts created after given datetime + value: + - id: '492272852428391563' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:17.745Z' + updated_at: '2026-07-10T12:53:17.762Z' + version: 1783687997 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/870ac174be8d75da6273f38eda88e341e51383696843a48e19540e8d4ddcd50e/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272852431537293' + contact_id: '492272852428391563' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:17.749Z' + updated_at: '2026-07-10T12:53:17.749Z' + version: 1783687997 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:17.755Z' + updated_at: '2026-07-10T12:53:17.755Z' + - id: '492272852453557394' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: 1 Infinite Loop + address2: '' + zipcode: '123456' + city: Redmond + country: NL + phone: '' + delivery_method: Email + customer_id: '2' + tax_number: '' + chamber_of_commerce: '' + bank_account: NL50TEST0166567191 + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: true + sepa_iban: NL50TEST0166567191 + sepa_iban_account_name: Foobar Holding B.V. + sepa_bic: RABONL2U + sepa_mandate_id: MAN12313 + sepa_mandate_date: '2014-01-01' + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:17.769Z' + updated_at: '2026-07-10T12:53:17.769Z' + version: 1783687997 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/ea9e23b4a3c5b01d764124bd6eb2706def9ea0570357898692439a9921764a81/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272852457751700' + contact_id: '492272852453557394' + administration_id: 123 + firstname: John + lastname: Doe + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:17.773Z' + updated_at: '2026-07-10T12:53:17.773Z' + version: 1783687997 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:17.779Z' + updated_at: '2026-07-10T12:53:17.779Z' + - id: '492272852470334616' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:17.785Z' + updated_at: '2026-07-10T12:53:17.785Z' + version: 1783687997 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + events: [] + operationId: get_administration_id_contacts_filter + /{administration_id}/contacts/synchronization{format}: + get: + summary: List all ids and versions + description: |- + Returns all contacts in the administration. The list contains the contact id and the version of the contact. + Check if the version of the contact is newer than the version you have stored locally, use the `POST` + variant for fetching contacts with the given ids. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /contacts/filter` — see that operation's description for the available keys. + schema: + type: string + examples: + RetrievesTheIdSForSynchronizationWithAFilter: + summary: Retrieves the id's for synchronization with a filter + value: first_name:henk + - name: include_archived + in: query + required: false + schema: + type: + - boolean + - string + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + ReturnAListOfIdSAndVersionIdS: + summary: Return a list of id's and version id's + value: + - id: '492272851475236823' + version: 1783687996 + - id: '492272851503548382' + version: 1783687996 + RetrievesTheIdSForSynchronizationWithAFilter: + summary: Retrieves the id's for synchronization with a filter + value: + - id: '492272851596871666' + version: 1783687996 + operationId: get_administration_id_contacts_synchronization + post: + summary: Fetch contacts with given ids + description: |- + Given a list of contact ids, returns the contact information belonging to the contacts. + Returns a maximum of 100 contacts, even if more ids are provided. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + ReturnAListOfGivenIds: + summary: Return a list of given ids + value: + ids: + - 492272860288517440 + - 492272860312634700 + responses: + '200': + description: A list of contacts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/contact_response' + examples: + ReturnAListOfGivenIds: + summary: Return a list of given ids + value: + - id: '492272860288517432' + administration_id: 123 + company_name: Bar Foo + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '3' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:25.241Z' + updated_at: '2026-07-10T12:53:25.241Z' + version: 1783688005 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/6c1823c7753d9cda57616658f7a377d1befe425dc071546a23590a2aa1aab657/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272860292711738' + contact_id: '492272860288517432' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:25.245Z' + updated_at: '2026-07-10T12:53:25.245Z' + version: 1783688005 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:25.251Z' + updated_at: '2026-07-10T12:53:25.251Z' + - id: '492272860312634688' + administration_id: 123 + company_name: Foo Bar + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '4' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:25.264Z' + updated_at: '2026-07-10T12:53:25.264Z' + version: 1783688005 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/1e597b1febb11e311abfd7ad20220490c4ef9a3cfc8dedbb02554156a9335af1/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272860316828994' + contact_id: '492272860312634688' + administration_id: 123 + firstname: Mark + lastname: van Vliet + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:25.268Z' + updated_at: '2026-07-10T12:53:25.268Z' + version: 1783688005 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:25.274Z' + updated_at: '2026-07-10T12:53:25.274Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400StatusWhenIdsAreNotProvided: + summary: Returns a 400 status when ids are not provided + value: + error: Ids is required + symbolic: + ids: required + operationId: post_administration_id_contacts_synchronization + /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}: + get: + summary: Get contact person + description: |- + Returns all information about a contact person. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A contact person + content: + application/json: + schema: + $ref: '#/components/schemas/contact_person_response' + examples: + ReturnAContactPerson: + summary: Return a contact person + value: + id: '492272853069071625' + contact_id: '492272853064877319' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:18.356Z' + updated_at: '2026-07-10T12:53:18.356Z' + version: 1783687998 + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenContactPersonDoesNotExist: + summary: Returns 404 when contact person does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_contacts_contact_id_contact_people_id + patch: + summary: Update a contact person + description: |- + When updating a contact, you only need to provide the information you want to change. Attributes you don't + provide in the request will not be updated. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + contact_person: + type: object + unevaluatedProperties: false + properties: + firstname: + type: string + lastname: + type: string + phone: + type: string + email: + type: string + description: Should be a valid email addresses. + department: + type: string + required: [] + required: [] + examples: + UpdateAContactPerson: + summary: Update a contact person + value: + contact_person: + firstname: John + lastname: Doe + responses: + '200': + description: Contact person updated + content: + application/json: + schema: + $ref: '#/components/schemas/contact_person_response' + examples: + UpdateAContactPerson: + summary: Update a contact person + value: + id: '492272854034810278' + contact_id: '492272854030615972' + administration_id: 123 + firstname: John + lastname: Doe + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:19.278Z' + updated_at: '2026-07-10T12:53:19.322Z' + version: 1783687999 + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenTheContactPersonIsNotFound: + summary: Returns a 404 status when the contact person is not found + value: + error: contact person not found + symbolic: + contact_person_id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422StatusWhenWrongParamsAreProvided: + summary: Returns a 422 status when wrong params are provided + value: + error: + firstname: + - can't be blank + lastname: + - can't be blank + details: + firstname: + - error: blank + lastname: + - error: blank + operationId: patch_administration_id_contacts_contact_id_contact_people_id + delete: + summary: Delete a contact person + description: |- + Deletes a contact person. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Contact person deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenTheContactPersonIsNotFound: + summary: Returns a 404 status when the contact person is not found + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_contacts_contact_id_contact_people_id + /{administration_id}/contacts/{contact_id}/contact_people{format}: + post: + summary: Create a new contact person + description: |- + Creating a new contact person in the administration requires at least a `contact_person` hash including `firstname` and `lastname`. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + contact_person: + type: object + unevaluatedProperties: false + properties: + firstname: + type: string + lastname: + type: string + phone: + type: string + email: + type: string + description: Should be a valid email addresses. + department: + type: string + required: [] + required: [] + examples: + CreateANewContactPersonWithAllParams: + summary: Create a new contact person with all params + value: + contact_person: + firstname: John + lastname: Doe + phone: '123456789' + email: johndoe@moneybird.com + department: Sales + CreateANewContactPersonWithMinimumParams: + summary: Create a new contact person with minimum params + value: + contact_person: + firstname: John + lastname: Doe + responses: + '201': + description: Contact person created + content: + application/json: + schema: + $ref: '#/components/schemas/contact_person_response' + examples: + CreateANewContactPersonWithAllParams: + summary: Create a new contact person with all params + value: + id: '492272852736672968' + contact_id: '492272852686341307' + administration_id: 123 + firstname: John + lastname: Doe + phone: '123456789' + email: johndoe@moneybird.com + department: Sales + created_at: '2026-07-10T12:53:18.039Z' + updated_at: '2026-07-10T12:53:18.039Z' + version: 1783687998 + CreateANewContactPersonWithMinimumParams: + summary: Create a new contact person with minimum params + value: + id: '492272852887667943' + contact_id: '492272852839433434' + administration_id: 123 + firstname: John + lastname: Doe + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:18.183Z' + updated_at: '2026-07-10T12:53:18.183Z' + version: 1783687998 + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422StatusWhenAWrongContactPersonIdIsProvided: + summary: Returns a 422 status when a wrong contact person id is provided + value: + error: + contact: + - must exist + details: + contact: + - error: blank + ReturnsA422StatusWhenWrongParamsAreProvided: + summary: Returns a 422 status when wrong params are provided + value: + error: + firstname: + - can't be blank + lastname: + - can't be blank + details: + firstname: + - error: blank + lastname: + - error: blank + operationId: post_administration_id_contacts_contact_id_contact_people + /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate/url{format}: + post: + summary: Request an URL for setting up a Moneybird Payments mandate + description: |- + Obtains an URL for setting up a Moneybird Payments mandate. You must provide + this URL to your contact to set-up the mandate. Your contact is required to + make a 15 cent payment. Every generated URL using this endpoint is valid + for 14 days after creation. Only available when Moneybird Payments is enabled + for the administration. + + ### Required scope(s) + `sales_invoices` and `settings` + tags: + - Contacts + security: + - bearerAuth: + - sales_invoices + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + mandate_request: + type: object + unevaluatedProperties: false + properties: + identity_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid identity id. + workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid workflow id. Restricts the available payment methods to the methods available for the selected workflow. + required: [] + required: [] + examples: + RequestsANewMoneybirdPaymentsMandateUrl: + summary: Requests a new moneybird payments mandate url + value: {} + RequestsANewMoneybirdPaymentsMandateUrlWithACustomWorkflowId: + summary: Requests a new moneybird payments mandate url with a custom workflow id + value: + mandate_request: + workflow_id: 492272855397959300 + responses: + '201': + description: A URL for setting up a Moneybird Payments mandate + content: + application/json: + schema: + type: object + properties: + url: + type: string + examples: + RequestsANewMoneybirdPaymentsMandateUrl: + summary: Requests a new moneybird payments mandate url + value: + url: https://moneybird.dev/123/mandate_requests/zICBpl9yYWlsc4KkZGF0YdlFNDkyMjcyODAxMjk3NzI4NjEzIDQ5MjI3Mjg1NTEzMTYyMDk3MyA0OTIyNzI4MDE4ODgwNzY5MDcKICAgICAgYWR5ZW4go2V4cMcLB85qY2BAzhfKJzYA--9927feff21b685097c62a5cf6f2a7d1f0c815364 + RequestsANewMoneybirdPaymentsMandateUrlWithACustomWorkflowId: + summary: Requests a new moneybird payments mandate url with a custom workflow id + value: + url: https://moneybird.dev/123/mandate_requests/zICBpl9yYWlsc4KkZGF0YdlXNDkyMjcyODAxMjk3NzI4NjEzIDQ5MjI3Mjg1NTMxMDkyNzUwMyA0OTIyNzI4MDE4ODgwNzY5MDcKICAgICAgYWR5ZW4gNDkyMjcyODU1Mzk3OTU5MzI4o2V4cMcLB85qY2BAziPRR5YA--58ae7bfd891e69cde74ee3bb16cd6371e055f3e8 + '403': + $ref: '#/components/responses/4XX_open_error' + operationId: post_administration_id_contacts_contact_id_moneybird_payments_mandate_url + /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}: + get: + summary: Get Moneybird Payments mandate + description: |- + Returns information about the stored Moneybird Payments mandate. Only + available when Moneybird Payments is enabled for the administration. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A Moneybird Payments mandate + content: + application/json: + schema: + $ref: '#/components/schemas/recurring_contract_response' + examples: + ReturnsLimitedInformationIfMandateExistsButOnlyLimitedInformationIsAvailable: + summary: Returns limited information if mandate exists, but only limited information is available + value: + type: mccorporatecredit + sepa_mandate: false + bank: null + iban: null + bic: null + iban_account_name: null + card_expiry_month: '3' + card_expiry_year: '2030' + card_final_digits: '0010' + created_at: '2022-04-11T09:17:56.000Z' + ReturnsInformationAboutTheStoredMoneybirdPaymentsMandate: + summary: Returns information about the stored moneybird payments mandate + value: + type: idealtestissuer5 + sepa_mandate: true + bank: Test Issuer 5 + iban: NL81TEST0536169128 + bic: TESTNL05 + iban_account_name: E. Klaassen + card_expiry_month: null + card_expiry_year: null + card_final_digits: null + created_at: '2022-04-07T13:31:09.000Z' + '403': + $ref: '#/components/responses/4XX_open_error' + '404': + $ref: '#/components/responses/4XX_open_error' + operationId: get_administration_id_contacts_contact_id_moneybird_payments_mandate + post: + summary: Request a new Moneybird Payments mandate + description: |- + Sends a request for a Moneybird Payments mandate to a contact via e-mail. + Your contact will receive an email containing a link to authorise direct + debit payments through Moneybird Payments. Your contact is required to + make a 15 cent payment. Only available when Moneybird Payments is enabled + for the administration. + + ### Required scope(s) + `sales_invoices` and `settings` + tags: + - Contacts + security: + - bearerAuth: + - sales_invoices + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + mandate_request: + type: object + unevaluatedProperties: false + properties: + email_message: + type: string + identity_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid identity id. + workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid workflow id. Restricts the available payment methods to the methods available for the selected workflow. + required: [] + required: [] + examples: + AllowsSettingAWorkflowId: + summary: Allows setting a workflow id + value: + mandate_request: + workflow_id: 492272854603138560 + RequestsANewMoneybirdPaymentsMandate: + summary: Requests a new moneybird payments mandate + value: {} + AllowsForACustomMessageWithinTheRequestE-mail: + summary: Allows for a custom message within the request e-mail + value: + mandate_request: + email_message: We use direct debit for our services, for which we require your authorisation. You can authorise us for direct debit through the button below. This requires you to make a one-time payment of 15 cents. This way we can verify your bank account. + responses: + '204': + description: Moneybird Payments mandate requested + '403': + $ref: '#/components/responses/4XX_open_error' + operationId: post_administration_id_contacts_contact_id_moneybird_payments_mandate + delete: + summary: Delete a stored Moneybird Payments mandate + description: |- + Deletes the stored Moneybird Payments mandate for the contact. Only + available when Moneybird Payments is enabled for the administration. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Contact deleted + '403': + $ref: '#/components/responses/4XX_open_error' + operationId: delete_administration_id_contacts_contact_id_moneybird_payments_mandate + /{administration_id}/contacts/{contact_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the contact. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400StatusWhenUserHasNoPermissionsToNotes: + summary: Returns a 400 status when user has no permissions to notes + value: + error: User has no permissions to notes for Contact + symbolic: + user: insufficient_permissions + operationId: delete_administration_id_contacts_contact_id_notes_id + /{administration_id}/contacts/{contact_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the contact. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + $ref: '#/components/schemas/identifier' + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492272857228773400 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492272857248696310' + administration_id: 123 + entity_id: '492272857182636008' + entity_type: Contact + user_id: '492272801297728613' + assignee_id: '492272857228773364' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:53:22.342Z' + updated_at: '2026-07-10T12:53:22.342Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400StatusWhenAWrongContactIdIsProvided: + summary: Returns a 400 status when a wrong contact id is provided + value: + error: Entity is invalid; User has no permissions to notes for Contact + symbolic: + entity: not_found + user: insufficient_permissions + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422StatusWhenWrongParamsAreProvided: + summary: Returns a 422 status when wrong params are provided + value: + error: + note: + - can't be blank + todo_type: + - can't be blank + details: + note: + - error: blank + todo_type: + - error: blank + operationId: post_administration_id_contacts_contact_id_notes + /{administration_id}/contacts/{id}/additional_charges{format}: + post: + summary: Create an additional charge to be invoiced at start of next period + description: |- + At the end of the current period, the additional charges for a contact are merged + where possible and an invoice will be created for them. The invoice will be scheduled + for sending at the first day of the next month. + + ### Required scope(s) + `sales_invoices` + tags: + - Contacts + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + additionalProperties: true + examples: + CreatesAUsageCharge: + summary: Creates a usage charge + value: + product_id: 492272851870549060 + amount: 5 x + price: 100 + period: 20210601..20210630 + description: Transaction Costs + ViewsAdditionalChargesOfAContact: + summary: Views additional charges of a contact + value: {} + responses: + '201': + description: Subscription additional charge created + content: + application/json: + schema: + $ref: '#/components/schemas/subscription_additional_charge_response' + examples: + CreatesAUsageCharge: + summary: Creates a usage charge + value: + id: '492272851891520551' + administration_id: 123 + contact_id: '492272851823363097' + subscription_id: null + product_id: '492272851870549029' + detail_id: null + amount: 5 x + price: '100.0' + period: 202106..202106 + description: Transaction Costs + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400StatusWhenASubscriptionIdIsProvided: + summary: Returns a 400 status when a subscription id is provided + value: + error: contact_id or subscription_id is required + symbolic: + contact_id: required + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenAWrongProductIdIsProvided: + summary: Returns a 404 status when a wrong product id is provided + value: + error: Product not found + symbolic: + product_id: not_found + operationId: post_administration_id_contacts_id_additional_charges + get: + summary: Get additional charges + description: |- + Get the additional charges of the given contact. + + ### Required scope(s) + `sales_invoices` + tags: + - Contacts + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: include_billed + in: query + required: false + schema: + type: + - boolean + - string + description: If true, includes the additional charges that have already been billed. Default is false. + examples: + DoesReturnBilledAdditionalChargesIfIncludeBilledIsTrue: + summary: Does return billed additional charges if include billed is true + value: 'true' + responses: + '200': + description: A list of additional charges + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/subscription_additional_charge_response' + examples: + DoesReturnBilledAdditionalChargesIfIncludeBilledIsTrue: + summary: Does return billed additional charges if include billed is true + value: + - id: '492272853365818674' + administration_id: 123 + contact_id: '492272853312341285' + subscription_id: null + product_id: '492272853363721521' + detail_id: null + amount: 1 x + price: '100.0' + period: 202106..202106 + description: Transaction Costs + - id: '492272853422441786' + administration_id: 123 + contact_id: '492272853312341285' + subscription_id: null + product_id: '492272853372110131' + detail_id: '492272853418247481' + amount: 1 x + price: '100.0' + period: 202106..202106 + description: Transaction Costs + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_contacts_id_additional_charges + /{administration_id}/contacts/{id}/archive{format}: + patch: + summary: Archive a contact + description: |- + Archives a contact. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Contact archived + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400StatusWhenTheContactIsAlreadyArchived: + summary: Returns a 400 status when the contact is already archived + value: + error: Contact can not be archived + symbolic: + id: can_not_be_archived + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenTheContactIsNotFound: + summary: Returns a 404 status when the contact is not found + value: + error: record not found + symbolic: + id: not_found + operationId: patch_administration_id_contacts_id_archive + /{administration_id}/contacts/{id}{format}: + get: + summary: Get contact + description: |- + Returns all information about a contact. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: include_archived + in: query + required: false + schema: + type: + - boolean + - string + responses: + '200': + description: A contact + content: + application/json: + schema: + $ref: '#/components/schemas/contact_response' + examples: + ReturnAContact: + summary: Return a contact + value: + id: '492272853789443449' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:19.043Z' + updated_at: '2026-07-10T12:53:19.061Z' + version: 1783687999 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/4e71a5685282ae8ee0496dc7a460df1ec84ff33d0f04641e912dce1561113979/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272853793637755' + contact_id: '492272853789443449' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:19.047Z' + updated_at: '2026-07-10T12:53:19.047Z' + version: 1783687999 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:19.054Z' + updated_at: '2026-07-10T12:53:19.054Z' + ReturnsSepaIbanAsBankAccount: + summary: Returns sepa iban as bank account + value: + id: '492272853946729877' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: NL50TEST0166567191 + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: NL50TEST0166567191 + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:19.193Z' + updated_at: '2026-07-10T12:53:19.235Z' + version: 1783687999 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/71bea86b84a82f94d90bed44a1faa614d6c3bae82b0f193bda4da1a8d755f82e/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272853950924183' + contact_id: '492272853946729877' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:19.197Z' + updated_at: '2026-07-10T12:53:19.197Z' + version: 1783687999 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:19.204Z' + updated_at: '2026-07-10T12:53:19.204Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenContactDoesNotExist: + summary: Returns 404 when contact does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_contacts_id + patch: + summary: Update a contact + description: |- + When updating a contact, you only need to provide the information you want to change. Attributes you don't + provide in the request will not be updated. Optional attributes can be removed by setting them to an empty string value. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + contact: + type: object + unevaluatedProperties: false + properties: + company_name: + type: string + description: A contact requires a non-blank `company_name`, `firstname` or `lastname`. + address1: + type: string + description: Primary street address of the contact. + address2: + type: string + description: Secondary address line (e.g. apartment number, building name). + zipcode: + type: string + description: Postal code or ZIP code of the contact's address. + city: + type: string + description: City or town of the contact's address. + country: + type: string + description: ISO two-character country code, e.g. NL or DE. + phone: + type: string + description: Phone number of the contact. + delivery_method: + type: string + description: Can be `Email`, `Simplerinvoicing`, `Peppol`, `Manual` or `Post`. + email_ubl: + type: + - boolean + - string + description: When `true`, a UBL (Universal Business Language) XML file is attached when emailing invoices to this contact. Enables machine-readable invoice processing. + customer_id: + type: string + description: Will be assigned automatically if empty. Should be unique for the administration. + tax_number: + type: string + description: The tax identification number (VAT number) of the contact, e.g. `NL123456789B01`. + firstname: + type: string + description: A contact requires a non-blank `company_name`, `firstname` or `lastname`. + lastname: + type: string + description: A contact requires a non-blank `company_name`, `firstname` or `lastname`. + chamber_of_commerce: + type: string + description: The CoC (Chamber of Commerce) registration number of the contact's business. + bank_account: + type: string + description: The bank account number (IBAN) of the contact. Used for outgoing payments and displayed on documents. + send_invoices_to_attention: + type: string + description: The name of the person to address invoices to (attention line). + send_invoices_to_email: + type: string + description: Should be one or more valid email addresses, separated by a comma. + send_estimates_to_attention: + type: string + description: The name of the person to address estimates to (attention line). + send_estimates_to_email: + type: string + description: Should be one or more valid email addresses, separated by a comma. + sepa_active: + type: + - boolean + - string + description: When `true`, all other SEPA fields are required. + sepa_iban: + type: string + description: Should be a valid IBAN. + sepa_iban_account_name: + type: string + description: The account holder name for the SEPA direct debit IBAN. + sepa_bic: + type: string + description: Should be a valid BIC. + sepa_mandate_id: + type: string + description: Should be unique for the administration. + sepa_mandate_date: + type: string + description: Should be a date in the past. + sepa_sequence_type: + type: string + description: Can be `RCUR`, `FRST`, `OOFF` or `FNAL`. + invoice_workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid invoice workflow id. + estimate_workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid estimate workflow id. + si_identifier_type: + type: string + description: Can be `0002`, `0007`, `0009`, `0037`, `0060`, `0088`, `0096`, `0097`, `0106`, `0130`, `0135`, `0142`, `0151`, `0183`, `0184`, `0188`, `0190`, `0191`, `0192`, `0193`, `0195`, `0196`, `0198`, `0199`, `0200`, `0201`, `0204`, `0205`, `0208`, `0209`, `0210`, `0211`, `0212`, `0213`, `0215`, `0216`, `0221`, `0230`, `9910`, `9913`, `9914`, `9915`, `9918`, `9919`, `9920`, `9922`, `9923`, `9924`, `9925`, `9926`, `9927`, `9928`, `9929`, `9930`, `9931`, `9932`, `9933`, `9934`, `9935`, `9936`, `9937`, `9938`, `9939`, `9940`, `9941`, `9942`, `9943`, `9944`, `9945`, `9946`, `9947`, `9948`, `9949`, `9950`, `9951`, `9952`, `9953`, `9957` or `9959`. + si_identifier: + type: string + description: The Peppol/e-invoicing identifier value for this contact. The format depends on the `si_identifier_type`. + direct_debit: + type: + - boolean + - string + description: When `true`, invoices for this contact are collected via SEPA direct debit. Requires SEPA fields to be configured. + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + required: + - contact + examples: + CreatesAContactPersonWhenCompanyNameFirstnameAndLastnameExistTogether: + summary: Creates a contact person when company name, firstname and lastname exist together + value: + contact: + firstname: Money + lastname: Bird + UpdateTheSepaSequenceType: + summary: Update the sepa sequence type + value: + contact: + sepa_sequence_type: FNAL + UpdateAContact: + summary: Update a contact + value: + contact: + company_name: Test B.V. + UpdatesAContactWithGivenSiIdentifier: + summary: Updates a contact with given si identifier + value: + contact: + si_identifier: '1234567' + si_identifier_type: NL:KVK + UpdateAContactThatHasSepaActivated: + summary: Update a contact that has sepa activated + value: + contact: + company_name: Test B.V. + responses: + '200': + description: Contact updated + content: + application/json: + schema: + $ref: '#/components/schemas/contact_response' + examples: + CreatesAContactPersonWhenCompanyNameFirstnameAndLastnameExistTogether: + summary: Creates a contact person when company name, firstname and lastname exist together + value: + id: '492272855931684622' + administration_id: 123 + company_name: Moneybird B.V. + firstname: Money + lastname: Bird + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: contact1@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: contact1@example.com + send_estimates_to_attention: null + send_estimates_to_email: null + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:21.086Z' + updated_at: '2026-07-10T12:53:21.096Z' + version: 1783688001 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272855951607570' + contact_id: '492272855931684622' + administration_id: 123 + firstname: Money + lastname: Bird + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:21.105Z' + updated_at: '2026-07-10T12:53:21.105Z' + version: 1783688001 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_changed + link_entity_id: null + link_entity_type: null + data: + changes: + firstname: + - null + - Money + lastname: + - null + - Bird + created_at: '2026-07-10T12:53:21.099Z' + updated_at: '2026-07-10T12:53:21.099Z' + UpdateTheSepaSequenceType: + summary: Update the sepa sequence type + value: + id: '492272856015570717' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: 1 Infinite Loop + address2: '' + zipcode: '123456' + city: Redmond + country: NL + phone: '' + delivery_method: Email + customer_id: '2' + tax_number: '' + chamber_of_commerce: '' + bank_account: NL50TEST0166567191 + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: true + sepa_iban: NL50TEST0166567191 + sepa_iban_account_name: Foobar Holding B.V. + sepa_bic: RABONL2U + sepa_mandate_id: MAN12313 + sepa_mandate_date: '2014-01-01' + sepa_sequence_type: FNAL + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:21.166Z' + updated_at: '2026-07-10T12:53:21.191Z' + version: 1783688001 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/44b2a8eefc2d0d6066a113b9b6bd5cb313a3a594aad95187c2b58b15bcfe0e47/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272856018716447' + contact_id: '492272856015570717' + administration_id: 123 + firstname: John + lastname: Doe + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:21.170Z' + updated_at: '2026-07-10T12:53:21.170Z' + version: 1783688001 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:21.176Z' + updated_at: '2026-07-10T12:53:21.176Z' + - administration_id: 123 + user_id: '492272801297728613' + action: contact_changed + link_entity_id: null + link_entity_type: null + data: + changes: + sepa_sequence_type: + - RCUR + - FNAL + created_at: '2026-07-10T12:53:21.194Z' + updated_at: '2026-07-10T12:53:21.194Z' + UpdateAContact: + summary: Update a contact + value: + id: '492272856164468532' + administration_id: 123 + company_name: Test B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:21.308Z' + updated_at: '2026-07-10T12:53:21.356Z' + version: 1783688001 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/32ba1dff9bd59792c5100e3d953fbc44a4ec3a733c41ac8f4b86eee8ec53eba3/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272856168662838' + contact_id: '492272856164468532' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:21.312Z' + updated_at: '2026-07-10T12:53:21.312Z' + version: 1783688001 + - id: '492272856228431683' + contact_id: '492272856164468532' + administration_id: 123 + firstname: null + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:21.370Z' + updated_at: '2026-07-10T12:53:21.370Z' + version: 1783688001 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:21.319Z' + updated_at: '2026-07-10T12:53:21.319Z' + - administration_id: 123 + user_id: '492272801297728613' + action: contact_changed + link_entity_id: null + link_entity_type: null + data: + changes: + company_name: + - Foobar Holding B.V. + - Test B.V. + created_at: '2026-07-10T12:53:21.359Z' + updated_at: '2026-07-10T12:53:21.359Z' + UpdatesAContactWithGivenSiIdentifier: + summary: Updates a contact with given si identifier + value: + id: '492272856350066517' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '1234567' + si_identifier_type: NL:KVK + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:21.485Z' + updated_at: '2026-07-10T12:53:21.533Z' + version: 1783688001 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/2e2e2fc95f43614bc8fa1e8f8fd9c15a499e6c37c4f72a4d8a7608b13a80dbcd/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272856353212247' + contact_id: '492272856350066517' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:21.489Z' + updated_at: '2026-07-10T12:53:21.489Z' + version: 1783688001 + - id: '492272856409835364' + contact_id: '492272856350066517' + administration_id: 123 + firstname: null + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:21.543Z' + updated_at: '2026-07-10T12:53:21.543Z' + version: 1783688001 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:21.496Z' + updated_at: '2026-07-10T12:53:21.496Z' + - administration_id: 123 + user_id: '492272801297728613' + action: contact_changed + link_entity_id: null + link_entity_type: null + data: + changes: + si_identifier: + - '' + - '1234567' + created_at: '2026-07-10T12:53:21.536Z' + updated_at: '2026-07-10T12:53:21.536Z' + UpdateAContactThatHasSepaActivated: + summary: Update a contact that has sepa activated + value: + id: '492272856697145233' + administration_id: 123 + company_name: Test B.V. + firstname: null + lastname: null + address1: 1 Infinite Loop + address2: '' + zipcode: '123456' + city: Redmond + country: NL + phone: '' + delivery_method: Email + customer_id: '2' + tax_number: '' + chamber_of_commerce: '' + bank_account: NL50TEST0166567191 + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: true + sepa_iban: NL50TEST0166567191 + sepa_iban_account_name: Foobar Holding B.V. + sepa_bic: RABONL2U + sepa_mandate_id: MAN12313 + sepa_mandate_date: '2014-01-01' + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:21.816Z' + updated_at: '2026-07-10T12:53:21.842Z' + version: 1783688001 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/97eab5cc4bed8e40b62908a0053f461eafb77281398f4d24a8da07ce063308ea/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272856702388115' + contact_id: '492272856697145233' + administration_id: 123 + firstname: John + lastname: Doe + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:21.821Z' + updated_at: '2026-07-10T12:53:21.821Z' + version: 1783688001 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:21.827Z' + updated_at: '2026-07-10T12:53:21.827Z' + - administration_id: 123 + user_id: '492272801297728613' + action: contact_changed + link_entity_id: null + link_entity_type: null + data: + changes: + company_name: + - Foobar Holding B.V. + - Test B.V. + created_at: '2026-07-10T12:53:21.845Z' + updated_at: '2026-07-10T12:53:21.845Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + DoesNotAllowMakingTheContactTrustedThroughTheApi: + summary: Does not allow making the contact trusted through the api + value: + error: An contact can only be trusted during the approval of a payment. + symbolic: + is_trusted: permission + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenTheContactIsNotFound: + summary: Returns a 404 status when the contact is not found + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsAnErrorWhenRecordIsInvalid: + summary: Returns an error when record is invalid + value: + error: + firstname: + - is required + lastname: + - is required + company_name: + - is required + details: + firstname: + - error: is required + lastname: + - error: is required + company_name: + - error: is required + operationId: patch_administration_id_contacts_id + delete: + summary: Delete a contact + description: |- + Deletes a contact. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Contact deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenTheContactIsNotFound: + summary: Returns a 404 status when the contact is not found + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_contacts_id + /{administration_id}/contacts{format}: + get: + summary: List all contacts + description: |- + Returns a paginated list of contacts in the administration. + + Searching for contacts can be done by providing the `query` parameter with search terms. The API searches for matches in the following contact fields: + + - `company_name` + - `attention` + - `firstname` + - `lastname` + - `address1` + - `address2` + - `zipcode` + - `city` + - `country` + - `email` + - `phone` + - `customer_id` + - `tax_number` + - `chamber_of_commerce` + - `bank_account` + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/per_page' + - $ref: '#/components/parameters/page' + - name: query + in: query + required: false + schema: + type: string + examples: + AllowsFilteringByNameInCombinationWithPagination: + summary: Allows filtering by name in combination with pagination + value: appleseed + ReturnsEmptyListWhenNoMatchesWithFilter: + summary: Returns empty list when no matches with filter + value: sdfadsfdsafdsafadsgasdfadsfdsf + - name: include_archived + in: query + required: false + schema: + type: + - boolean + - string + - name: todo + in: query + required: false + schema: + type: string + - name: contact_field + in: query + required: false + schema: + type: string + - name: contact_value + in: query + required: false + schema: + type: string + - name: contact_import_id + in: query + required: false + description: Restrict to contacts created by the given contact import batch. + schema: + type: + - integer + - string + responses: + '200': + description: A list of contacts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/contact_response' + examples: + AllowsFilteringByNameInCombinationWithPagination: + summary: Allows filtering by name in combination with pagination + value: [] + ReturnsEmptyListWhenNoMatchesWithFilter: + summary: Returns empty list when no matches with filter + value: [] + AllowsFilteringByName: + summary: Allows filtering by name + value: + - id: '492272859486356669' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:24.476Z' + updated_at: '2026-07-10T12:53:24.583Z' + version: 1783688004 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/d3cfc9c05a88d5e48cf4d820145fba55ec36caebcb3a34108d1e67a0ff3d4051/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272859490550975' + contact_id: '492272859486356669' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:24.480Z' + updated_at: '2026-07-10T12:53:24.480Z' + version: 1783688004 + - id: '492272859749549260' + contact_id: '492272859486356669' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:24.727Z' + updated_at: '2026-07-10T12:53:24.727Z' + version: 1783688004 + - id: '492272859757937871' + contact_id: '492272859486356669' + administration_id: 123 + firstname: Foo + lastname: Bar + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:24.735Z' + updated_at: '2026-07-10T12:53:24.735Z' + version: 1783688004 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:24.575Z' + updated_at: '2026-07-10T12:53:24.575Z' + ReturnAListOfContacts: + summary: Return a list of contacts + value: + - id: '492272859819803859' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:24.794Z' + updated_at: '2026-07-10T12:53:24.812Z' + version: 1783688004 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/f6141ba794e91762782b4282a2c7fa84d4dad33fe8d2091c09d300ab976ba4f0/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272859823998165' + contact_id: '492272859819803859' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:24.798Z' + updated_at: '2026-07-10T12:53:24.798Z' + version: 1783688004 + - id: '492272859869086946' + contact_id: '492272859819803859' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:24.841Z' + updated_at: '2026-07-10T12:53:24.841Z' + version: 1783688004 + - id: '492272859876426981' + contact_id: '492272859819803859' + administration_id: 123 + firstname: Foo + lastname: Bar + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:24.848Z' + updated_at: '2026-07-10T12:53:24.848Z' + version: 1783688004 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:24.805Z' + updated_at: '2026-07-10T12:53:24.805Z' + - id: '492272859847066842' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: 1 Infinite Loop + address2: '' + zipcode: '123456' + city: Redmond + country: NL + phone: '' + delivery_method: Email + customer_id: '2' + tax_number: '' + chamber_of_commerce: '' + bank_account: NL50TEST0166567191 + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: true + sepa_iban: NL50TEST0166567191 + sepa_iban_account_name: Foobar Holding B.V. + sepa_bic: RABONL2U + sepa_mandate_id: MAN12313 + sepa_mandate_date: '2014-01-01' + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:24.820Z' + updated_at: '2026-07-10T12:53:24.820Z' + version: 1783688004 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/f7f3992537aec6fbc7f1737ca658ef2fd41d569e2166d36c5316b90569e3fecc/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272859851261148' + contact_id: '492272859847066842' + administration_id: 123 + firstname: John + lastname: Doe + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:24.824Z' + updated_at: '2026-07-10T12:53:24.824Z' + version: 1783688004 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:24.831Z' + updated_at: '2026-07-10T12:53:24.831Z' + - id: '492272859864892640' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:24.837Z' + updated_at: '2026-07-10T12:53:24.837Z' + version: 1783688004 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + events: [] + ReturnsPaginatedContactsOnPage2: + summary: Returns paginated contacts on page 2 + value: + - id: '492272859957167344' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: 1 Infinite Loop + address2: '' + zipcode: '123456' + city: Redmond + country: NL + phone: '' + delivery_method: Email + customer_id: '2' + tax_number: '' + chamber_of_commerce: '' + bank_account: NL50TEST0166567191 + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: true + sepa_iban: NL50TEST0166567191 + sepa_iban_account_name: Foobar Holding B.V. + sepa_bic: RABONL2U + sepa_mandate_id: MAN12313 + sepa_mandate_date: '2014-01-01' + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:24.925Z' + updated_at: '2026-07-10T12:53:24.925Z' + version: 1783688004 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/89113e9736fd031c048797ffbc7fa6a8669851f26ab5c8f7b312061e86977c1f/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272859961361650' + contact_id: '492272859957167344' + administration_id: 123 + firstname: John + lastname: Doe + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:24.930Z' + updated_at: '2026-07-10T12:53:24.930Z' + version: 1783688004 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:24.936Z' + updated_at: '2026-07-10T12:53:24.936Z' + ReturnsPaginatedContactsOnPage1: + summary: Returns paginated contacts on page 1 + value: + - id: '492272860133328149' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: Appleseed + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234 AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:25.093Z' + updated_at: '2026-07-10T12:53:25.110Z' + version: 1783688005 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/51a592a865e41a16554b4ee1b954add2bfdb4247f51a504dab0a32f1e6fd69c1/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272860137522455' + contact_id: '492272860133328149' + administration_id: 123 + firstname: John + lastname: Appleseed + phone: null + email: null + department: null + created_at: '2026-07-10T12:53:25.097Z' + updated_at: '2026-07-10T12:53:25.097Z' + version: 1783688005 + - id: '492272860180514084' + contact_id: '492272860133328149' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:25.138Z' + updated_at: '2026-07-10T12:53:25.138Z' + version: 1783688005 + - id: '492272860186805543' + contact_id: '492272860133328149' + administration_id: 123 + firstname: Foo + lastname: Bar + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:25.145Z' + updated_at: '2026-07-10T12:53:25.145Z' + version: 1783688005 + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:25.104Z' + updated_at: '2026-07-10T12:53:25.104Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyContactsAreRequested: + summary: Returns an error when too many contacts are requested + value: + error: per_page does not have a valid value + operationId: get_administration_id_contacts + post: + summary: Create a new contact + description: |- + Creating a new contact in the administration requires at least a `company_name` or a `firstname` and `lastname`. + When filling a custom field, both `id` and `value` are required. See the custom field example for more information. + + ### Required scope(s) + Any of: `estimates`, `sales_invoices`, `documents`, `bank` or `settings` + tags: + - Contacts + security: + - bearerAuth: + - estimates + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - bank + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + contact: + type: object + unevaluatedProperties: false + properties: + company_name: + type: string + description: A contact requires a non-blank `company_name`, `firstname` or `lastname`. + address1: + type: string + description: Primary street address of the contact. + address2: + type: string + description: Secondary address line (e.g. apartment number, building name). + zipcode: + type: string + description: Postal code or ZIP code of the contact's address. + city: + type: string + description: City or town of the contact's address. + country: + type: string + description: ISO two-character country code, e.g. NL or DE. + phone: + type: string + description: Phone number of the contact. + delivery_method: + type: string + description: Can be `Email`, `Simplerinvoicing`, `Peppol`, `Manual` or `Post`. + customer_id: + type: string + description: Will be assigned automatically if empty. Should be unique for the administration. + tax_number: + type: string + description: The tax identification number (VAT number) of the contact, e.g. `NL123456789B01`. + firstname: + type: string + description: A contact requires a non-blank `company_name`, `firstname` or `lastname`. + lastname: + type: string + description: A contact requires a non-blank `company_name`, `firstname` or `lastname`. + chamber_of_commerce: + type: string + description: The CoC (Chamber of Commerce) registration number of the contact's business. + bank_account: + type: string + description: The bank account number (IBAN) of the contact. Used for outgoing payments and displayed on documents. + send_invoices_to_attention: + type: string + description: The name of the person to address invoices to (attention line), e.g. "Finance Department". + send_invoices_to_email: + type: string + description: Should be one or more valid email addresses, separated by a comma. + send_estimates_to_attention: + type: string + description: The name of the person to address estimates to (attention line). + send_estimates_to_email: + type: string + description: Should be one or more valid email addresses, separated by a comma. + sepa_active: + type: + - boolean + - string + description: When `true`, all other SEPA fields are required. + sepa_iban: + type: string + description: Should be a valid IBAN. + sepa_iban_account_name: + type: string + description: The account holder name for the SEPA direct debit IBAN. + sepa_bic: + type: string + description: Should be a valid BIC. + sepa_mandate_id: + type: string + description: Should be unique for the administration. + sepa_mandate_date: + type: string + description: Should be a date in the past. + sepa_sequence_type: + type: string + description: Can be `RCUR`, `FRST`, `OOFF` or `FNAL`. + si_identifier_type: + type: string + description: Can be `0002`, `0007`, `0009`, `0037`, `0060`, `0088`, `0096`, `0097`, `0106`, `0130`, `0135`, `0142`, `0151`, `0183`, `0184`, `0188`, `0190`, `0191`, `0192`, `0193`, `0195`, `0196`, `0198`, `0199`, `0200`, `0201`, `0204`, `0205`, `0208`, `0209`, `0210`, `0211`, `0212`, `0213`, `0215`, `0216`, `0221`, `0230`, `9910`, `9913`, `9914`, `9915`, `9918`, `9919`, `9920`, `9922`, `9923`, `9924`, `9925`, `9926`, `9927`, `9928`, `9929`, `9930`, `9931`, `9932`, `9933`, `9934`, `9935`, `9936`, `9937`, `9938`, `9939`, `9940`, `9941`, `9942`, `9943`, `9944`, `9945`, `9946`, `9947`, `9948`, `9949`, `9950`, `9951`, `9952`, `9953`, `9957` or `9959`. + si_identifier: + type: string + description: The Peppol/e-invoicing identifier value for this contact. The format depends on the `si_identifier_type`. + invoice_workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid invoice workflow id. + estimate_workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid estimate workflow id. + email_ubl: + type: + - boolean + - string + description: When `true`, a UBL (Universal Business Language) XML file is attached when emailing invoices to this contact. Enables machine-readable invoice processing. + direct_debit: + type: + - boolean + - string + description: When `true`, invoices for this contact are collected via SEPA direct debit. Requires SEPA fields to be configured. + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + contact_person: + type: object + description: An optional initial contact person to create along with the contact. Additional contact persons can be managed via the contact persons endpoint. + unevaluatedProperties: false + properties: + firstname: + type: string + description: First name of the contact person. + lastname: + type: string + description: Last name of the contact person. + required: + - firstname + - lastname + required: [] + required: + - contact + examples: + CreateANewContactWithMandateDateInTimezoneGap: + summary: Create a new contact with mandate date in timezone gap + value: + contact: + company_name: Test B.V. + sepa_active: true + sepa_iban: NL91ABNA0417164300 + sepa_iban_account_name: Foo Bar + sepa_mandate_date: 2017-6-30 + sepa_mandate_id: NL123214 + CreateANewContact: + summary: Create a new contact + value: + contact: + company_name: Test B.V. + CreateANewContactWithGivenSiIdentifier: + summary: Create a new contact with given si identifier + value: + contact: + company_name: Test B.V. + si_identifier: '1234567' + si_identifier_type: NL:KVK + AddingValuesForCustomFields: + summary: Adding values for custom fields + value: + contact: + company_name: Test B.V. + custom_fields_attributes: + '0': + id: 492272861039298000 + value: Field value + responses: + '201': + description: Contact created + content: + application/json: + schema: + $ref: '#/components/schemas/contact_response' + examples: + CreateANewContactWithMandateDateInTimezoneGap: + summary: Create a new contact with mandate date in timezone gap + value: + id: '492272860608333182' + administration_id: 123 + company_name: Test B.V. + firstname: '' + lastname: '' + address1: '' + address2: '' + zipcode: '' + city: '' + country: NL + phone: '' + delivery_method: Email + customer_id: '3' + tax_number: '' + chamber_of_commerce: '' + bank_account: NL91ABNA0417164300 + is_trusted: false + max_transfer_amount: null + attention: '' + email: '' + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: '' + send_estimates_to_attention: '' + send_estimates_to_email: '' + direct_debit: false + sepa_active: true + sepa_iban: NL91ABNA0417164300 + sepa_iban_account_name: Foo Bar + sepa_bic: ABNANL2A + sepa_mandate_id: NL123214 + sepa_mandate_date: '2017-06-30' + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2017-06-30T23:30:00.012Z' + updated_at: '2017-06-30T23:30:00.012Z' + version: 1498865400 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/72ac76a3f5b6f67936c300b516b30f7a781e020353b1525106334f912bbf13ce/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2017-06-30T23:30:00.015Z' + updated_at: '2017-06-30T23:30:00.015Z' + CreateANewContact: + summary: Create a new contact + value: + id: '492272860702705039' + administration_id: 123 + company_name: Test B.V. + firstname: '' + lastname: '' + address1: '' + address2: '' + zipcode: '' + city: '' + country: NL + phone: '' + delivery_method: Email + customer_id: '3' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: '' + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: '' + send_estimates_to_attention: '' + send_estimates_to_email: '' + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:25.637Z' + updated_at: '2026-07-10T12:53:25.637Z' + version: 1783688005 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/49df10012c39371b3d71ed780101dfc2663e2b939db83cd22c6fb4c7b7aa92f4/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:25.640Z' + updated_at: '2026-07-10T12:53:25.640Z' + CreateANewContactWithGivenSiIdentifier: + summary: Create a new contact with given si identifier + value: + id: '492272860949120444' + administration_id: 123 + company_name: Test B.V. + firstname: '' + lastname: '' + address1: '' + address2: '' + zipcode: '' + city: '' + country: NL + phone: '' + delivery_method: Email + customer_id: '3' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: '' + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: '' + send_estimates_to_attention: '' + send_estimates_to_email: '' + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '1234567' + si_identifier_type: NL:KVK + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:25.871Z' + updated_at: '2026-07-10T12:53:25.871Z' + version: 1783688005 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/7a20b17df7aba95312919362265985ecbcfae473743c23db4012bbe73beeafc7/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:25.875Z' + updated_at: '2026-07-10T12:53:25.875Z' + AddingValuesForCustomFields: + summary: Adding values for custom fields + value: + id: '492272861053978064' + administration_id: 123 + company_name: Test B.V. + firstname: '' + lastname: '' + address1: '' + address2: '' + zipcode: '' + city: '' + country: NL + phone: '' + delivery_method: Email + customer_id: '3' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: '' + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: '' + send_estimates_to_attention: '' + send_estimates_to_email: '' + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:25.971Z' + updated_at: '2026-07-10T12:53:25.971Z' + version: 1783688005 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/ec62cf6f8347c3e7da3ccfb3e4a6bf543f15a55a4e0bf91ace87911a5fd5c778/all + notes: [] + custom_fields: + - id: '492272861039297998' + name: Number + value: Field value + contact_people: [] + archived: false + events: + - administration_id: 123 + user_id: '492272801297728613' + action: contact_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:25.975Z' + updated_at: '2026-07-10T12:53:25.975Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenFieldsAreNotProvided: + summary: Returns an error when fields are not provided + value: + error: Contact is required + symbolic: + contact: required + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenCustomFieldCannotBeFound: + summary: Returns an error when custom field cannot be found + value: + error: Custom field with id 1234 not found for administration + symbolic: + custom_fields_attributes: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + DoesNotCreateContactWhenMandateDateIsFutureInAdministrationTimezone: + summary: Does not create contact when mandate date is future in administration timezone + value: + error: + sepa_mandate_date: + - cannot be in the future + details: + sepa_mandate_date: + - error: not_in_future + ReturnsAnErrorWhenRecordIsInvalid: + summary: Returns an error when record is invalid + value: + error: + firstname: + - is required + lastname: + - is required + company_name: + - is required + details: + firstname: + - error: is required + lastname: + - error: is required + company_name: + - error: is required + operationId: post_administration_id_contacts + /{administration_id}/custom_fields{format}: + get: + summary: List all custom fields + description: |- + Custom fields are used to add extra information to entities in the administration. The `source` + field can be `sales_invoices`, `contact` or `identity` and defines for which entities the custom + field can be used. The id of a custom field is required to add a value for a custom field to an + entity. + + ### Required scope(s) + `settings` + tags: + - Custom fields + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of custom fields + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/custom_field_response' + examples: + ReturnsAllCustomFieldsOfAnAdministration: + summary: Returns all custom fields of an administration + value: + - id: '492273013033534887' + administration_id: 123 + name: custom_field_09718c7befeec7db6843 + source: sales_invoice + operationId: get_administration_id_custom_fields + /{administration_id}/customer_contact_portal/{contact_id}/invoices{format}: + get: + summary: Get a temporary link to the invoices in the customer contact portal + description: Generate a temporary link to the invoices in the customer contact portal. The link will expire after 1 hour. + tags: + - Customer contact portal + security: + - bearerAuth: [] + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Temporary link generated successfully + content: + application/json: + schema: + type: string + example: https://moneybird.com/temporary-link + examples: + ReturnsATemporaryLinkThatRedirectsToTheInvoicesPage: + summary: Returns a temporary link that redirects to the invoices page + value: http://moneybird.com + '404': + description: Contact not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheContactDoesNotExist: + summary: Returns 404 when the contact does not exist + value: + error: 'Record not found for model name: Contact' + operationId: get_administration_id_customer_contact_portal_contact_id_invoices + /{administration_id}/customer_contact_portal/{contact_id}/subscriptions/{id}{format}: + get: + summary: Get a temporary link to the subscriptions in the customer contact portal + description: |- + Generate a temporary link to the subscriptions in the customer contact portal. The link will expire after 1 hour. + Creating the online sales link can be done using the [Create online sales link endpoint](https://developer.moneybird.com/api/subscription-templates#create-online-sales-link). + tags: + - Customer contact portal + security: + - bearerAuth: [] + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Temporary link generated successfully + content: + application/json: + schema: + type: string + example: https://moneybird.com/temporary-link + examples: + ReturnsATemporaryLink: + summary: Returns a temporary link + value: http://moneybird.com + '404': + description: Contact or subscription not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheSubscriptionDoesNotBelongToTheContact: + summary: Returns 404 when the subscription does not belong to the contact + value: + error: 'Record not found for model name: Subscription' + Returns404WhenTheSubscriptionHasNoSubscriptionTemplate: + summary: Returns 404 when the subscription has no subscription template + value: + error: 'Record not found for model name: Subscription' + operationId: get_administration_id_customer_contact_portal_contact_id_subscriptions_id + /{administration_id}/customer_contact_portal/{contact_id}{format}: + get: + summary: Get a temporary link to the customer contact portal + description: Generate a temporary link to the customer contact portal. The link will expire after 1 hour. + tags: + - Customer contact portal + security: + - bearerAuth: [] + parameters: + - $ref: '#/components/parameters/administration_id' + - name: contact_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Temporary link generated successfully + content: + application/json: + schema: + type: string + example: https://moneybird.com/temporary-link + examples: + CallsGeneratetemporarylinkMutation: + summary: Calls generatetemporarylink mutation + value: http://moneybird.com + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheContactDoesNotBelongToTheAdministration: + summary: Returns 404 when the contact does not belong to the administration + value: + error: 'Record not found for model name: Contact' + Returns404WhenTheContactDoesNotExist: + summary: Returns 404 when the contact does not exist + value: + error: 'Record not found for model name: Contact' + operationId: get_administration_id_customer_contact_portal_contact_id + /{administration_id}/document_styles{format}: + get: + summary: List all document styles + description: |- + Returns a list of all document styles. + + ### Required scope(s) + `settings` + tags: + - Document styles + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of document styles + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/document_style_response' + examples: + ReturnsAllDocumentstylesOfAnAdministration: + summary: Returns all documentstyles of an administration + value: + - id: '492272803084502169' + administration_id: 123 + name: Standaard + identity_id: '492272801888076907' + default: true + logo_hash: null + logo_container_full_width: false + logo_display_width: 50 + logo_position: right + background_hash: null + paper_size: A4 + address_position: left + font_size: 9 + font_family: lucida_grande + print_on_stationery: false + custom_css: null + invoice_sender_address: + - field: company_name + bold: true + - field: address + - field: newline + - field: email + - field: phone + - field: newline + - field: chamber_of_commerce + label: true + - field: tax_number + label: true + - field: bank_account_number + label: true + invoice_metadata_left: + - field: reference + invoice_metadata_right: + - field: invoice_date + - field: due_date + estimate_sender_address: + - field: company_name + bold: true + - field: address + - field: newline + - field: email + - field: phone + - field: newline + - field: chamber_of_commerce + label: true + - field: tax_number + label: true + - field: bank_account_number + label: true + estimate_metadata_left: + - field: reference + estimate_metadata_right: + - field: estimate_date + - field: due_date + created_at: '2026-07-10T12:52:30.684Z' + updated_at: '2026-07-10T12:52:30.710Z' + operationId: get_administration_id_document_styles + /{administration_id}/documents/general_documents/synchronization{format}: + get: + summary: List ids and versions of general documents + description: |- + Returns all documents in the administration. The list contains the document id and the version of the document. + Check if the version of the document is newer than the version you have stored locally, use the `POST` + variant for fetching documents with the given ids. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /documents/general_documents` — see that operation's description for the available keys. + schema: + type: string + examples: + RetrievesAllIdsForSynchronizationUsingAFilter: + summary: Retrieves all ids for synchronization using a filter + value: period:this_month + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesAllIdsForSynchronization: + summary: Retrieves all ids for synchronization + value: + - id: '492272841179268582' + version: 1783687987 + - id: '492272841191851496' + version: 1783687987 + - id: '492272841203385834' + version: 1783687987 + RetrievesAllIdsForSynchronizationUsingAFilter: + summary: Retrieves all ids for synchronization using a filter + value: + - id: '492272841327117819' + version: 1783687987 + - id: '492272841338652157' + version: 1783687987 + - id: '492272841349137919' + version: 1783687987 + operationId: get_administration_id_documents_general_documents_synchronization + post: + summary: Fetch general documents with given ids + description: |- + Given a list of document ids, returns the document information belonging to the documents. + Returns a maximum of 100 documents, even if more ids are provided. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + ids: + - 492272841013593540 + - 492272841026176450 + responses: + '200': + description: A list of general documents + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/general_document_response' + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + - id: '492272841013593555' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 3 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:06.860Z' + updated_at: '2026-07-10T12:53:06.860Z' + version: 1783687986 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:06.863Z' + updated_at: '2026-07-10T12:53:06.863Z' + - id: '492272841026176469' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 4 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:06.871Z' + updated_at: '2026-07-10T12:53:06.871Z' + version: 1783687986 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:06.874Z' + updated_at: '2026-07-10T12:53:06.874Z' + operationId: post_administration_id_documents_general_documents_synchronization + /{administration_id}/documents/general_documents/{general_document_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the general document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: general_document_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '400': + $ref: '#/components/responses/400_bad_request' + operationId: delete_administration_id_documents_general_documents_general_document_id_notes_id + /{administration_id}/documents/general_documents/{general_document_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the general document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: general_document_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + $ref: '#/components/schemas/identifier' + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492272845504644160 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492272845524567087' + administration_id: 123 + entity_id: '492272845492061227' + entity_type: Document + user_id: '492272801297728613' + assignee_id: '492272845504644141' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:53:11.162Z' + updated_at: '2026-07-10T12:53:11.162Z' + '400': + $ref: '#/components/responses/400_bad_request' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_general_documents_general_document_id_notes + /{administration_id}/documents/general_documents/{id}/attachments/{attachment_id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: '{"message":"Use the Location header to download the attachment"}' + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_documents_general_documents_id_attachments_attachment_id_download + /{administration_id}/documents/general_documents/{id}/attachments/{attachment_id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_general_documents_id_attachments_attachment_id + /{administration_id}/documents/general_documents/{id}/attachments{format}: + post: + summary: Add attachment to general document + description: |- + Add an attachment to a general document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + UploadsAnAttachment: + summary: Uploads an attachment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_general_documents_id_attachments + /{administration_id}/documents/general_documents/{id}{format}: + get: + summary: Get general document + description: |- + Returns a general document by id. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A general document + content: + application/json: + schema: + $ref: '#/components/schemas/general_document_response' + examples: + ReturnsTheWantedGeneralDocument: + summary: Returns the wanted general document + value: + id: '492272844804196275' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 2 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:10.474Z' + updated_at: '2026-07-10T12:53:10.474Z' + version: 1783687990 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:10.478Z' + updated_at: '2026-07-10T12:53:10.478Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + OnlyReturnsGeneralDocuments: + summary: Only returns general documents + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_documents_general_documents_id + delete: + summary: Delete a general document + description: |- + Deletes a general document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + DeletesTheGeneralDocument: + summary: Deletes the general document + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_general_documents_id + patch: + summary: Update a general document + description: |- + Updates a general document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + general_document: + type: object + unevaluatedProperties: false + properties: + reference: + type: string + description: '**Required**.' + date: + type: string + format: date + description: '**Required**.' + due_date: + type: string + format: date + reminder_date: + type: string + format: date + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reminder: + type: object + unevaluatedProperties: false + description: Creates a reminder to-do for this document. + properties: + date: + type: string + format: date + message: + type: string + required: + - date + required: [] + remove_contact: + type: + - boolean + - string + required: [] + examples: + UpdatesTheGeneralDocument: + summary: Updates the general document + value: + general_document: + reference: updated reference + responses: + '200': + description: General document updated + content: + application/json: + schema: + $ref: '#/components/schemas/general_document_response' + examples: + UpdatesTheGeneralDocument: + summary: Updates the general document + value: + id: '492272845193218039' + administration_id: 123 + contact_id: null + contact: null + reference: updated reference + date: '2026-07-10' + due_date: null + entry_number: 2 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:10.845Z' + updated_at: '2026-07-10T12:53:10.869Z' + version: 1783687990 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:10.848Z' + updated_at: '2026-07-10T12:53:10.848Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:10.871Z' + updated_at: '2026-07-10T12:53:10.871Z' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: patch_administration_id_documents_general_documents_id + /{administration_id}/documents/general_documents{format}: + get: + summary: Get general documents + description: |- + Returns a paginated list of documents of this type in the administration. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | + | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | + | recurring | `String` | `all` | `all`, `enabled` or `disabled` | + | attachment | `String` | `all` | `all`, `with` or `without` | + | reference | `String` | | Documents with the given reference value | + | contact_id | `Integer` | | Documents belonging to the given contact | + | ledger_account_id | `Integer` | | Documents booking against the given ledger account | + | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | + + Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. + schema: + type: string + default: period:this_year + - name: new_filter + in: query + required: false + schema: + type: string + description: 'String terms, example: `key1:value1,key2:value2`.' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of general documents + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/general_document_response' + examples: + ReturnsPaginatedGeneralDocumentsOnPage2: + summary: Returns paginated general documents on page 2 + value: + - id: '492272841811559995' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 4 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:07.620Z' + updated_at: '2026-07-10T12:53:07.620Z' + version: 1783687987 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:07.623Z' + updated_at: '2026-07-10T12:53:07.623Z' + ReturnsAListOfGeneralDocuments: + summary: Returns a list of general documents + value: + - id: '492272842004498004' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 5 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:07.804Z' + updated_at: '2026-07-10T12:53:07.804Z' + version: 1783687987 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:07.807Z' + updated_at: '2026-07-10T12:53:07.807Z' + - id: '492272841992963666' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 4 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:07.793Z' + updated_at: '2026-07-10T12:53:07.793Z' + version: 1783687987 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:07.796Z' + updated_at: '2026-07-10T12:53:07.796Z' + - id: '492272841981429328' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 3 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:07.782Z' + updated_at: '2026-07-10T12:53:07.782Z' + version: 1783687987 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:07.785Z' + updated_at: '2026-07-10T12:53:07.785Z' + - id: '492272841969894990' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 2 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:07.771Z' + updated_at: '2026-07-10T12:53:07.771Z' + version: 1783687987 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:07.774Z' + updated_at: '2026-07-10T12:53:07.774Z' + ReturnsPaginatedGeneralDocumentsOnPage1: + summary: Returns paginated general documents on page 1 + value: + - id: '492272842189047403' + administration_id: 123 + contact_id: null + contact: null + reference: Contract + date: '2026-07-10' + due_date: null + entry_number: 5 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:07.980Z' + updated_at: '2026-07-10T12:53:07.980Z' + version: 1783687987 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:07.983Z' + updated_at: '2026-07-10T12:53:07.983Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyGeneralDocumentsAreRequested: + summary: Returns an error when too many general documents are requested + value: + error: Per Page is too big + symbolic: + per_page: max + operationId: get_administration_id_documents_general_documents + post: + summary: Create a new general document + description: |- + Creates a new general document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + general_document: + type: object + unevaluatedProperties: false + properties: + reference: + type: string + description: '**Required**.' + date: + type: string + format: date + description: '**Required**.' + due_date: + type: string + format: date + reminder_date: + type: string + format: date + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reminder: + type: object + unevaluatedProperties: false + description: Creates a reminder to-do for this document. + properties: + date: + type: string + format: date + message: + type: string + required: + - date + required: [] + required: [] + examples: + CreatesTheGeneralDocument: + summary: Creates the general document + value: + general_document: + reference: foobar + contact_id: 492272844137301800 + responses: + '201': + description: General document created + content: + application/json: + schema: + $ref: '#/components/schemas/general_document_response' + examples: + CreatesTheGeneralDocument: + summary: Creates the general document + value: + id: '492272844211750732' + administration_id: 123 + contact_id: '492272844137301820' + contact: + id: '492272844137301820' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:09.838Z' + updated_at: '2026-07-10T12:53:09.838Z' + version: 1783687989 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: foobar + date: '2026-07-10' + due_date: null + entry_number: 3 + state: saved + exchange_rate: '1.0' + created_at: '2026-07-10T12:53:09.909Z' + updated_at: '2026-07-10T12:53:09.909Z' + version: 1783687989 + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:09.912Z' + updated_at: '2026-07-10T12:53:09.912Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RequiresAllInput: + summary: Requires all input + value: + error: General Document is required + symbolic: + general_document: required + '402': + $ref: '#/components/responses/402_payment_required' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_general_documents + /{administration_id}/documents/general_journal_documents/synchronization{format}: + get: + summary: List ids and versions of general journal documents + description: |- + Returns all documents in the administration. The list contains the document id and the version of the document. + Check if the version of the document is newer than the version you have stored locally, use the `POST` + variant for fetching documents with the given ids. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /documents/general_journal_documents` — see that operation's description for the available keys. + schema: + type: string + examples: + RetrievesAllIdsForSynchronizationUsingAFilter: + summary: Retrieves all ids for synchronization using a filter + value: period:this_month + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesAllIdsForSynchronization: + summary: Retrieves all ids for synchronization + value: + - id: '492272832750814527' + version: 1783687978 + - id: '492272832806389074' + version: 1783687979 + - id: '492272832867206501' + version: 1783687979 + RetrievesAllIdsForSynchronizationUsingAFilter: + summary: Retrieves all ids for synchronization using a filter + value: + - id: '492272833048610185' + version: 1783687979 + - id: '492272833099990428' + version: 1783687979 + - id: '492272833149273519' + version: 1783687979 + operationId: get_administration_id_documents_general_journal_documents_synchronization + post: + summary: Fetch general journal documents with given ids + description: |- + Given a list of document ids, returns the document information belonging to the documents. + Returns a maximum of 100 documents, even if more ids are provided. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + ids: + - 492272832483427600 + - 492272832534807800 + responses: + '200': + description: A list of general journal documents + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/general_journal_document_response' + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + - id: '492272832534807835' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:58.774Z' + updated_at: '2026-07-10T12:52:58.774Z' + version: 1783687978 + general_journal_document_entries: + - id: '492272832536904988' + administration_id: 123 + ledger_account_id: '492272832509642010' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:58.776Z' + updated_at: '2026-07-10T12:52:58.776Z' + description: First + - id: '492272832537953565' + administration_id: 123 + ledger_account_id: '492272832509642010' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:58.777Z' + updated_at: '2026-07-10T12:52:58.777Z' + description: Second + - id: '492272832539002142' + administration_id: 123 + ledger_account_id: '492272832509642010' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:58.778Z' + updated_at: '2026-07-10T12:52:58.778Z' + description: Third + - id: '492272832540050719' + administration_id: 123 + ledger_account_id: '492272832509642010' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:58.779Z' + updated_at: '2026-07-10T12:52:58.779Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:58.781Z' + updated_at: '2026-07-10T12:52:58.781Z' + - id: '492272832483427592' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:58.724Z' + updated_at: '2026-07-10T12:52:58.724Z' + version: 1783687978 + general_journal_document_entries: + - id: '492272832485524745' + administration_id: 123 + ledger_account_id: '492272832458261767' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:58.726Z' + updated_at: '2026-07-10T12:52:58.726Z' + description: First + - id: '492272832486573322' + administration_id: 123 + ledger_account_id: '492272832458261767' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:58.727Z' + updated_at: '2026-07-10T12:52:58.727Z' + description: Second + - id: '492272832487621899' + administration_id: 123 + ledger_account_id: '492272832458261767' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:58.728Z' + updated_at: '2026-07-10T12:52:58.728Z' + description: Third + - id: '492272832488670476' + administration_id: 123 + ledger_account_id: '492272832458261767' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:58.729Z' + updated_at: '2026-07-10T12:52:58.729Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:58.731Z' + updated_at: '2026-07-10T12:52:58.731Z' + operationId: post_administration_id_documents_general_journal_documents_synchronization + /{administration_id}/documents/general_journal_documents/{general_journal_document_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the general journal document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: general_journal_document_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '400': + $ref: '#/components/responses/400_bad_request' + operationId: delete_administration_id_documents_general_journal_documents_general_journal_document_id_notes_id + /{administration_id}/documents/general_journal_documents/{general_journal_document_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the general journal document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: general_journal_document_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + $ref: '#/components/schemas/identifier' + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492272831967528100 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492272832007374013' + administration_id: 123 + entity_id: '492272831927682217' + entity_type: Document + user_id: '492272801297728613' + assignee_id: '492272831967528123' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:52:58.270Z' + updated_at: '2026-07-10T12:52:58.270Z' + '400': + $ref: '#/components/responses/400_bad_request' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_general_journal_documents_general_journal_document_id_notes + /{administration_id}/documents/general_journal_documents/{id}/attachments/{attachment_id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: '{"message":"Use the Location header to download the attachment"}' + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_documents_general_journal_documents_id_attachments_attachment_id_download + /{administration_id}/documents/general_journal_documents/{id}/attachments/{attachment_id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_general_journal_documents_id_attachments_attachment_id + /{administration_id}/documents/general_journal_documents/{id}/attachments{format}: + post: + summary: Add attachment to general journal document + description: |- + Add an attachment to a general journal document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + UploadsAnAttachment: + summary: Uploads an attachment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_general_journal_documents_id_attachments + /{administration_id}/documents/general_journal_documents/{id}{format}: + get: + summary: Get general journal document + description: |- + Returns a general journal document by id. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A general journal document + content: + application/json: + schema: + $ref: '#/components/schemas/general_journal_document_response' + examples: + ReturnsTheWantedGeneralJournalDocument: + summary: Returns the wanted general journal document + value: + id: '492272831385568353' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:57.676Z' + updated_at: '2026-07-10T12:52:57.676Z' + version: 1783687977 + general_journal_document_entries: + - id: '492272831387665506' + administration_id: 123 + ledger_account_id: '492272831345722464' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:57.679Z' + updated_at: '2026-07-10T12:52:57.679Z' + description: First + - id: '492272831388714083' + administration_id: 123 + ledger_account_id: '492272831345722464' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:57.680Z' + updated_at: '2026-07-10T12:52:57.680Z' + description: Second + - id: '492272831389762660' + administration_id: 123 + ledger_account_id: '492272831345722464' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:57.682Z' + updated_at: '2026-07-10T12:52:57.682Z' + description: Third + - id: '492272831391859813' + administration_id: 123 + ledger_account_id: '492272831345722464' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:57.683Z' + updated_at: '2026-07-10T12:52:57.683Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:57.686Z' + updated_at: '2026-07-10T12:52:57.686Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + OnlyReturnsGeneralJournalDocuments: + summary: Only returns general journal documents + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_documents_general_journal_documents_id + delete: + summary: Delete a general journal document + description: |- + Deletes a general journal document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + DeletesTheGeneralJournalDocument: + summary: Deletes the general journal document + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_general_journal_documents_id + patch: + summary: Update a general journal document + description: |- + Updates a general journal document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + general_journal_document: + type: object + unevaluatedProperties: false + properties: + reference: + type: string + date: + type: string + journal_type: + type: string + description: Can be `["fiscal_year_ending", "fiscal_year_ending"]`. + general_journal_document_entries_attributes: + oneOf: + - type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: integer + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + tax_rate_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid tax rate id. + description: + type: string + debit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + credit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + project_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid project id. + row_order: + type: integer + _destroy: + type: + - boolean + - string + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + required: [] + - type: object + additionalProperties: + type: object + properties: + id: + type: integer + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + tax_rate_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid tax rate id. + description: + type: string + debit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + credit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + project_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid project id. + row_order: + type: integer + _destroy: + type: + - boolean + - string + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + required: [] + required: [] + all_taxes: + type: + - boolean + - string + required: [] + examples: + UpdatesTheGeneralJournalDocument: + summary: Updates the general journal document + value: + general_journal_document: + reference: updated reference + responses: + '200': + description: General journal document updated + content: + application/json: + schema: + $ref: '#/components/schemas/general_journal_document_response' + examples: + UpdatesTheGeneralJournalDocument: + summary: Updates the general journal document + value: + id: '492272834074117744' + administration_id: 123 + reference: updated reference + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:53:00.241Z' + updated_at: '2026-07-10T12:53:00.299Z' + version: 1783687980 + general_journal_document_entries: + - id: '492272834076214897' + administration_id: 123 + ledger_account_id: '492272834047903343' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:53:00.243Z' + updated_at: '2026-07-10T12:53:00.243Z' + description: First + - id: '492272834077263474' + administration_id: 123 + ledger_account_id: '492272834047903343' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:53:00.244Z' + updated_at: '2026-07-10T12:53:00.244Z' + description: Second + - id: '492272834078312051' + administration_id: 123 + ledger_account_id: '492272834047903343' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:53:00.245Z' + updated_at: '2026-07-10T12:53:00.245Z' + description: Third + - id: '492272834079360628' + administration_id: 123 + ledger_account_id: '492272834047903343' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:53:00.246Z' + updated_at: '2026-07-10T12:53:00.246Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:00.249Z' + updated_at: '2026-07-10T12:53:00.249Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:00.304Z' + updated_at: '2026-07-10T12:53:00.304Z' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: patch_administration_id_documents_general_journal_documents_id + /{administration_id}/documents/general_journal_documents{format}: + get: + summary: Get general journal documents + description: |- + Returns a paginated list of documents of this type in the administration. + + The `exclude_new_general_journal_documents` parameter, when set to `true`, removes documents that are still in the `new` state from the response. It has no effect on other document types. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | + | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | + | recurring | `String` | `all` | `all`, `enabled` or `disabled` | + | attachment | `String` | `all` | `all`, `with` or `without` | + | reference | `String` | | Documents with the given reference value | + | contact_id | `Integer` | | Documents belonging to the given contact | + | ledger_account_id | `Integer` | | Documents booking against the given ledger account | + | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | + + Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. + schema: + type: string + default: period:this_year + - name: new_filter + in: query + required: false + schema: + type: string + description: 'String terms, example: `key1:value1,key2:value2`.' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + - name: exclude_new_general_journal_documents + in: query + required: false + schema: + type: + - boolean + - string + responses: + '200': + description: A list of general journal documents + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/general_journal_document_response' + examples: + ReturnsPaginatedGeneralJournalDocumentsOnPage2: + summary: Returns paginated general journal documents on page 2 + value: + - id: '492272829528540911' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:55.906Z' + updated_at: '2026-07-10T12:52:55.906Z' + version: 1783687975 + general_journal_document_entries: + - id: '492272829530638064' + administration_id: 123 + ledger_account_id: '492272829502326510' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:55.908Z' + updated_at: '2026-07-10T12:52:55.908Z' + description: First + - id: '492272829531686641' + administration_id: 123 + ledger_account_id: '492272829502326510' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:55.910Z' + updated_at: '2026-07-10T12:52:55.910Z' + description: Second + - id: '492272829532735218' + administration_id: 123 + ledger_account_id: '492272829502326510' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:55.911Z' + updated_at: '2026-07-10T12:52:55.911Z' + description: Third + - id: '492272829534832371' + administration_id: 123 + ledger_account_id: '492272829502326510' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:55.912Z' + updated_at: '2026-07-10T12:52:55.912Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:55.915Z' + updated_at: '2026-07-10T12:52:55.915Z' + ReturnsAListOfGeneralJournalDocuments: + summary: Returns a list of general journal documents + value: + - id: '492272829953214303' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:56.311Z' + updated_at: '2026-07-10T12:52:56.311Z' + version: 1783687976 + general_journal_document_entries: + - id: '492272829955311456' + administration_id: 123 + ledger_account_id: '492272829930145630' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:56.313Z' + updated_at: '2026-07-10T12:52:56.313Z' + description: First + - id: '492272829956360033' + administration_id: 123 + ledger_account_id: '492272829930145630' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:56.314Z' + updated_at: '2026-07-10T12:52:56.314Z' + description: Second + - id: '492272829957408610' + administration_id: 123 + ledger_account_id: '492272829930145630' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:56.315Z' + updated_at: '2026-07-10T12:52:56.315Z' + description: Third + - id: '492272829958457187' + administration_id: 123 + ledger_account_id: '492272829930145630' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:56.316Z' + updated_at: '2026-07-10T12:52:56.316Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:56.319Z' + updated_at: '2026-07-10T12:52:56.319Z' + - id: '492272829903931212' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:56.264Z' + updated_at: '2026-07-10T12:52:56.264Z' + version: 1783687976 + general_journal_document_entries: + - id: '492272829906028365' + administration_id: 123 + ledger_account_id: '492272829879813963' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:56.266Z' + updated_at: '2026-07-10T12:52:56.266Z' + description: First + - id: '492272829907076942' + administration_id: 123 + ledger_account_id: '492272829879813963' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:56.267Z' + updated_at: '2026-07-10T12:52:56.267Z' + description: Second + - id: '492272829908125519' + administration_id: 123 + ledger_account_id: '492272829879813963' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:56.268Z' + updated_at: '2026-07-10T12:52:56.268Z' + description: Third + - id: '492272829909174096' + administration_id: 123 + ledger_account_id: '492272829879813963' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:56.269Z' + updated_at: '2026-07-10T12:52:56.269Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:56.271Z' + updated_at: '2026-07-10T12:52:56.271Z' + - id: '492272829855696697' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:56.218Z' + updated_at: '2026-07-10T12:52:56.218Z' + version: 1783687976 + general_journal_document_entries: + - id: '492272829857793850' + administration_id: 123 + ledger_account_id: '492272829832628024' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:56.220Z' + updated_at: '2026-07-10T12:52:56.220Z' + description: First + - id: '492272829858842427' + administration_id: 123 + ledger_account_id: '492272829832628024' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:56.221Z' + updated_at: '2026-07-10T12:52:56.221Z' + description: Second + - id: '492272829859891004' + administration_id: 123 + ledger_account_id: '492272829832628024' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:56.222Z' + updated_at: '2026-07-10T12:52:56.222Z' + description: Third + - id: '492272829860939581' + administration_id: 123 + ledger_account_id: '492272829832628024' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:56.223Z' + updated_at: '2026-07-10T12:52:56.223Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:56.225Z' + updated_at: '2026-07-10T12:52:56.225Z' + - id: '492272829807462182' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:56.172Z' + updated_at: '2026-07-10T12:52:56.172Z' + version: 1783687976 + general_journal_document_entries: + - id: '492272829809559335' + administration_id: 123 + ledger_account_id: '492272829782296357' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:56.174Z' + updated_at: '2026-07-10T12:52:56.174Z' + description: First + - id: '492272829810607912' + administration_id: 123 + ledger_account_id: '492272829782296357' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:56.175Z' + updated_at: '2026-07-10T12:52:56.175Z' + description: Second + - id: '492272829811656489' + administration_id: 123 + ledger_account_id: '492272829782296357' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:56.176Z' + updated_at: '2026-07-10T12:52:56.176Z' + description: Third + - id: '492272829812705066' + administration_id: 123 + ledger_account_id: '492272829782296357' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:56.177Z' + updated_at: '2026-07-10T12:52:56.177Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:56.179Z' + updated_at: '2026-07-10T12:52:56.179Z' + ReturnsPaginatedGeneralJournalDocumentsOnPage1: + summary: Returns paginated general journal documents on page 1 + value: + - id: '492272830304487356' + administration_id: 123 + reference: Deprecations + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:52:56.646Z' + updated_at: '2026-07-10T12:52:56.646Z' + version: 1783687976 + general_journal_document_entries: + - id: '492272830305535933' + administration_id: 123 + ledger_account_id: '492272830281418683' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: 1 + created_at: '2026-07-10T12:52:56.648Z' + updated_at: '2026-07-10T12:52:56.648Z' + description: First + - id: '492272830307633086' + administration_id: 123 + ledger_account_id: '492272830281418683' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: 2 + created_at: '2026-07-10T12:52:56.649Z' + updated_at: '2026-07-10T12:52:56.649Z' + description: Second + - id: '492272830308681663' + administration_id: 123 + ledger_account_id: '492272830281418683' + project_id: null + contact_id: null + debit: '50.0' + credit: '0.0' + row_order: 3 + created_at: '2026-07-10T12:52:56.650Z' + updated_at: '2026-07-10T12:52:56.650Z' + description: Third + - id: '492272830308681664' + administration_id: 123 + ledger_account_id: '492272830281418683' + project_id: null + contact_id: null + debit: '0.0' + credit: '50.0' + row_order: 4 + created_at: '2026-07-10T12:52:56.651Z' + updated_at: '2026-07-10T12:52:56.651Z' + description: Fourth + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:56.653Z' + updated_at: '2026-07-10T12:52:56.653Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyGeneralJournalDocumentsAreRequested: + summary: Returns an error when too many general journal documents are requested + value: + error: Per Page is too big + symbolic: + per_page: max + operationId: get_administration_id_documents_general_journal_documents + post: + summary: Create a new general journal document + description: |- + Creates a new general journal document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: General journal documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + general_journal_document: + type: object + unevaluatedProperties: false + properties: + reference: + type: string + date: + type: string + format: date + description: Date of the journal entry. Defaults to today. + journal_type: + type: string + description: Can be `["fiscal_year_ending", "fiscal_year_ending"]`. + general_journal_document_entries_attributes: + oneOf: + - type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: integer + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + tax_rate_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid tax rate id. + description: + type: string + debit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + credit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + project_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid project id. + row_order: + type: integer + _destroy: + type: + - boolean + - string + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + required: [] + - type: object + additionalProperties: + type: object + properties: + id: + type: integer + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + tax_rate_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid tax rate id. + description: + type: string + debit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + credit: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + project_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid project id. + row_order: + type: integer + _destroy: + type: + - boolean + - string + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + required: [] + required: [] + required: [] + examples: + CreatesTheGeneralJournalDocument: + summary: Creates the general journal document + value: + general_journal_document: + reference: foobar + general_journal_document_entries_attributes: + '0': + ledger_account_id: 492272838902809700 + debit: 100 + credit: 0 + '1': + ledger_account_id: 492272838963627200 + debit: 0 + credit: 100 + responses: + '201': + description: General journal document created + content: + application/json: + schema: + $ref: '#/components/schemas/general_journal_document_response' + examples: + CreatesTheGeneralJournalDocument: + summary: Creates the general journal document + value: + id: '492272838999278755' + administration_id: 123 + reference: foobar + date: '2026-07-10' + journal_type: null + created_at: '2026-07-10T12:53:04.938Z' + updated_at: '2026-07-10T12:53:04.938Z' + version: 1783687984 + general_journal_document_entries: + - id: '492272839000327332' + administration_id: 123 + ledger_account_id: '492272838902809740' + project_id: null + contact_id: null + debit: '100.0' + credit: '0.0' + row_order: null + created_at: '2026-07-10T12:53:04.940Z' + updated_at: '2026-07-10T12:53:04.940Z' + description: null + - id: '492272839001375909' + administration_id: 123 + ledger_account_id: '492272838963627169' + project_id: null + contact_id: null + debit: '0.0' + credit: '100.0' + row_order: null + created_at: '2026-07-10T12:53:04.941Z' + updated_at: '2026-07-10T12:53:04.941Z' + description: null + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:04.943Z' + updated_at: '2026-07-10T12:53:04.943Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RequiresAllInput: + summary: Requires all input + value: + error: General Journal Document is required + symbolic: + general_journal_document: required + '402': + $ref: '#/components/responses/402_payment_required' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_general_journal_documents + /{administration_id}/documents/purchase_invoices/synchronization{format}: + get: + summary: List ids and versions of purchase invoices + description: |- + Returns all documents in the administration. The list contains the document id and the version of the document. + Check if the version of the document is newer than the version you have stored locally, use the `POST` + variant for fetching documents with the given ids. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /documents/purchase_invoices` — see that operation's description for the available keys. + schema: + type: string + examples: + RetrievesIdsForSynchronizationUsingAnUpdatedAfterFilter: + summary: Retrieves ids for synchronization using an updated after filter + value: updated_after:2026-07-09T12:56:13Z + ReturnsUniqueIdsEvenWhenPurchaseInvoicesHaveMultipleAttachments: + summary: Returns unique ids even when purchase invoices have multiple attachments + value: period:this_month + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesIdsForSynchronizationUsingAnUpdatedAfterFilter: + summary: Retrieves ids for synchronization using an updated after filter + value: + - id: '492273036987204902' + version: 1783688173 + - id: '492273037078431038' + version: 1783688173 + - id: '492273037131908426' + version: 1783688173 + ReturnsUniqueIdsEvenWhenPurchaseInvoicesHaveMultipleAttachments: + summary: Returns unique ids even when purchase invoices have multiple attachments + value: + - id: '492273037228377433' + version: 1783688173 + - id: '492273037326943601' + version: 1783688174 + - id: '492273037374129533' + version: 1783688174 + RetrievesAllIdsForSynchronization: + summary: Retrieves all ids for synchronization + value: + - id: '492273037469549966' + version: 1783688174 + - id: '492273037561824678' + version: 1783688174 + - id: '492273037609010610' + version: 1783688174 + RetrievesAllIdsForSynchronizationUsingAFilter: + summary: Retrieves all ids for synchronization using a filter + value: + - id: '492273037691848129' + version: 1783688174 + - id: '492273037792511449' + version: 1783688174 + - id: '492273037848085989' + version: 1783688174 + operationId: get_administration_id_documents_purchase_invoices_synchronization + post: + summary: Fetch purchase invoices with given ids + description: |- + Given a list of document ids, returns the document information belonging to the documents. + Returns a maximum of 100 documents, even if more ids are provided. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + ids: + - 492273036822578400 + - 492273036872910100 + responses: + '200': + description: A list of purchase invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/purchase_invoice_response' + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + - id: '492273036822578443' + administration_id: 123 + contact_id: '492273036686263537' + contact: + id: '492273036686263537' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:13.467Z' + updated_at: '2026-07-10T12:56:13.467Z' + version: 1783688173 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:13.597Z' + updated_at: '2026-07-10T12:56:13.601Z' + version: 1783688173 + details: + - id: '492273036824675596' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:13.599Z' + updated_at: '2026-07-10T12:56:13.599Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:13.604Z' + updated_at: '2026-07-10T12:56:13.604Z' + - id: '492273036872910103' + administration_id: 123 + contact_id: '492273036686263537' + contact: + id: '492273036686263537' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:13.467Z' + updated_at: '2026-07-10T12:56:13.467Z' + version: 1783688173 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 4 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:13.645Z' + updated_at: '2026-07-10T12:56:13.650Z' + version: 1783688173 + details: + - id: '492273036876055832' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:13.647Z' + updated_at: '2026-07-10T12:56:13.647Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:13.653Z' + updated_at: '2026-07-10T12:56:13.653Z' + operationId: post_administration_id_documents_purchase_invoices_synchronization + /{administration_id}/documents/purchase_invoices/{id}/attachments/{attachment_id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: '{"message":"Use the Location header to download the attachment"}' + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_documents_purchase_invoices_id_attachments_attachment_id_download + /{administration_id}/documents/purchase_invoices/{id}/attachments/{attachment_id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_purchase_invoices_id_attachments_attachment_id + /{administration_id}/documents/purchase_invoices/{id}/attachments{format}: + post: + summary: Add attachment to purchase invoice + description: |- + Add an attachment to a purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + UploadsAnAttachment: + summary: Uploads an attachment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_purchase_invoices_id_attachments + /{administration_id}/documents/purchase_invoices/{id}/payments/{payment_id}{format}: + delete: + summary: Delete a payment + description: |- + Deletes a payment from a purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: payment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Payment deleted + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_purchase_invoices_id_payments_payment_id + /{administration_id}/documents/purchase_invoices/{id}/payments{format}: + post: + summary: Create a payment + description: |- + Registers a payment for a purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + description: The date on which the payment was made. + price: + $ref: '#/components/schemas/number' + description: The amount paid in the document's currency. Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. + transaction_identifier: + type: string + description: An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. + manual_payment_action: + type: string + description: Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + description: The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). + required: + - payment_date + - price + required: [] + examples: + CreateAPayment: + summary: Create a payment + value: + payment: + payment_date: '2026-07-10T12:56:18.690Z' + price: '363.0' + responses: + '201': + description: Payment created + content: + application/json: + schema: + $ref: '#/components/schemas/payment_response' + examples: + CreateAPayment: + summary: Create a payment + value: + id: '492273042182898971' + administration_id: 123 + invoice_type: Document + invoice_id: '492273042088527107' + financial_account_id: null + user_id: '492272801297728613' + payment_transaction_id: null + transaction_identifier: null + price: '363.0' + price_base: '363.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: null + ledger_account_id: '492272802141832322' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:56:18.709Z' + updated_at: '2026-07-10T12:56:18.709Z' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_purchase_invoices_id_payments + /{administration_id}/documents/purchase_invoices/{id}/register_payment{format}: + patch: + summary: Register a payment for a purchase invoice + description: |- + This endpoint is deprecated and should no longer be used. It has been replaced by `Create a payment`. + + ### Required scope(s) + `documents` + deprecated: true + x-sunset: '2026-12-31' + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + price: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency. Required for foreign currencies. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial mutation id. + transaction_identifier: + type: string + manual_payment_action: + type: string + description: Can be `private_payment`, `payment_without_proof`, `cash_payment`, `rounding_error`, `bank_transfer`, `balance_settlement` or `invoices_settlement`. + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + required: + - payment_date + - price + required: [] + examples: + CreateAPayment: + summary: Create a payment + value: + payment: + payment_date: '2026-07-10T12:56:17.682Z' + price: '363.0' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + CreateAPayment: + summary: Create a payment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: patch_administration_id_documents_purchase_invoices_id_register_payment + /{administration_id}/documents/purchase_invoices/{id}{format}: + get: + summary: Get purchase invoice + description: |- + Returns a purchase invoice by id. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A purchase invoice + content: + application/json: + schema: + $ref: '#/components/schemas/purchase_invoice_response' + examples: + IncludesFiscalAllocations: + summary: Includes fiscal allocations + value: + id: '492273038966916815' + administration_id: 123 + contact_id: '492273038829553333' + contact: + id: '492273038829553333' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:15.510Z' + updated_at: '2026-07-10T12:56:15.510Z' + version: 1783688175 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:15.642Z' + updated_at: '2026-07-10T12:56:15.646Z' + version: 1783688175 + details: + - id: '492273038969013968' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:15.644Z' + updated_at: '2026-07-10T12:56:15.644Z' + fiscal_allocations: + - id: '492273038996276956' + administration_id: 123 + ledger_account_id: '492272802100937849' + private_ledger_account_id: '492273038992082651' + percentage: '25.0' + price: '90.75' + price_base: '90.75' + created_at: '2026-07-10T12:56:15.671Z' + updated_at: '2026-07-10T12:56:15.671Z' + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:15.650Z' + updated_at: '2026-07-10T12:56:15.650Z' + ReturnsTheWantedPurchaseInvoice: + summary: Returns the wanted purchase invoice + value: + id: '492273040054290318' + administration_id: 123 + contact_id: '492273040019687308' + contact: + id: '492273040019687308' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:16.646Z' + updated_at: '2026-07-10T12:56:16.646Z' + version: 1783688176 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:16.679Z' + updated_at: '2026-07-10T12:56:16.682Z' + version: 1783688176 + details: + - id: '492273040055338895' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:16.681Z' + updated_at: '2026-07-10T12:56:16.681Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:16.686Z' + updated_at: '2026-07-10T12:56:16.686Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + OnlyReturnsPurchaseInvoices: + summary: Only returns purchase invoices + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_documents_purchase_invoices_id + delete: + summary: Delete a purchase invoices + description: |- + Deletes a purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + DeletesThePurchaseInvoice: + summary: Deletes the purchase invoice + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_purchase_invoices_id + patch: + summary: Update purchase invoice + description: |- + Updates a purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + purchase_invoice: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reference: + type: string + description: The supplier's invoice number or reference. + date: + type: string + description: The date on the supplier's invoice. + format: date + due_date: + type: string + description: The date by which the invoice should be paid. + format: date + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the purchase invoice are inclusive of tax. + revenue_invoice: + type: + - boolean + - string + description: When `true`, this purchase invoice is treated as a revenue invoice (e.g. a credit note from a supplier). + details_attributes: + $ref: '#/components/schemas/details_attributes' + fiscal_allocations_attributes: + $ref: '#/components/schemas/fiscal_allocations_attributes' + required: [] + required: [] + examples: + AddsFiscalAllocationsToAnExistingDocument: + summary: Adds fiscal allocations to an existing document + value: + purchase_invoice: + fiscal_allocations_attributes: + - ledger_account_id: 492272802100937860 + private_ledger_account_id: 492273038402782850 + percentage: '40' + RemovesAFiscalAllocationWithDestroy: + summary: Removes a fiscal allocation with destroy + value: + purchase_invoice: + fiscal_allocations_attributes: + '0': + id: 492273038719452800 + _destroy: true + UpdatesThePurchaseInvoice: + summary: Updates the purchase invoice + value: + purchase_invoice: + reference: updated reference + UpdatesInvoiceDetails: + summary: Updates invoice details + value: + purchase_invoice: + details_attributes: + '0': + description: New detail + price: 99 + amount: 1 + tax_rate_id: 492272802329527400 + ledger_account_id: 492272802100937860 + '1': + id: 492273039341258500 + _destroy: true + responses: + '200': + description: Purchase invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/purchase_invoice_response' + examples: + AddsFiscalAllocationsToAnExistingDocument: + summary: Adds fiscal allocations to an existing document + value: + id: '492273038378665556' + administration_id: 123 + contact_id: '492273038245496378' + contact: + id: '492273038245496378' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:14.954Z' + updated_at: '2026-07-10T12:56:14.954Z' + version: 1783688174 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '325.2' + total_price_excl_tax_base: '325.2' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:15.081Z' + updated_at: '2026-07-10T12:56:15.147Z' + version: 1783688175 + details: + - id: '492273038380762709' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '180.0' + total_price_excl_tax_with_discount_base: '180.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:15.083Z' + updated_at: '2026-07-10T12:56:15.145Z' + fiscal_allocations: + - id: '492273038443677281' + administration_id: 123 + ledger_account_id: '492272802100937849' + private_ledger_account_id: '492273038402782816' + percentage: '40.0' + price: '145.2' + price_base: '145.2' + created_at: '2026-07-10T12:56:15.144Z' + updated_at: '2026-07-10T12:56:15.144Z' + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:15.088Z' + updated_at: '2026-07-10T12:56:15.088Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: + total_price_excl_tax: + - '300.0' + - '325.2' + total_price_excl_tax_base: + - '300.0' + - '325.2' + cached_taxes: + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '63.0' + credit: 0 + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '37.8' + credit: 0 + updated_at: + - '2026-07-10T14:56:15.085+02:00' + - '2026-07-10T14:56:15.142+02:00' + created_at: '2026-07-10T12:56:15.150Z' + updated_at: '2026-07-10T12:56:15.150Z' + RemovesAFiscalAllocationWithDestroy: + summary: Removes a fiscal allocation with destroy + value: + id: '492273038689044115' + administration_id: 123 + contact_id: '492273038506591865' + contact: + id: '492273038506591865' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:15.203Z' + updated_at: '2026-07-10T12:56:15.203Z' + version: 1783688175 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:15.377Z' + updated_at: '2026-07-10T12:56:15.382Z' + version: 1783688175 + details: + - id: '492273038692189844' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:15.379Z' + updated_at: '2026-07-10T12:56:15.379Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:15.385Z' + updated_at: '2026-07-10T12:56:15.385Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: {} + created_at: '2026-07-10T12:56:15.449Z' + updated_at: '2026-07-10T12:56:15.449Z' + UpdatesThePurchaseInvoice: + summary: Updates the purchase invoice + value: + id: '492273039087503072' + administration_id: 123 + contact_id: '492273039049754334' + contact: + id: '492273039049754334' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:15.721Z' + updated_at: '2026-07-10T12:56:15.721Z' + version: 1783688175 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: updated reference + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:15.758Z' + updated_at: '2026-07-10T12:56:15.865Z' + version: 1783688175 + details: + - id: '492273039089600225' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:15.760Z' + updated_at: '2026-07-10T12:56:15.760Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:15.765Z' + updated_at: '2026-07-10T12:56:15.765Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: + reference: + - 2013-01234 + - updated reference + updated_at: + - '2026-07-10T14:56:15.762+02:00' + - '2026-07-10T14:56:15.865+02:00' + created_at: '2026-07-10T12:56:15.870Z' + updated_at: '2026-07-10T12:56:15.870Z' + UpdatesInvoiceDetails: + summary: Updates invoice details + value: + id: '492273039337064206' + administration_id: 123 + contact_id: '492273039285683980' + contact: + id: '492273039285683980' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:15.946Z' + updated_at: '2026-07-10T12:56:15.946Z' + version: 1783688175 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '99.0' + total_price_excl_tax_base: '99.0' + total_price_incl_tax: '119.79' + total_price_incl_tax_base: '119.79' + created_at: '2026-07-10T12:56:15.995Z' + updated_at: '2026-07-10T12:56:16.130Z' + version: 1783688176 + details: + - id: '492273039476524838' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: '1' + amount_decimal: '1.0' + description: New detail + price: '99.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '99.0' + total_price_excl_tax_with_discount_base: '99.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:16.128Z' + updated_at: '2026-07-10T12:56:16.128Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:16.010Z' + updated_at: '2026-07-10T12:56:16.010Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: + total_price_excl_tax: + - '300.0' + - '99.0' + total_price_excl_tax_base: + - '300.0' + - '99.0' + total_price_incl_tax: + - '363.0' + - '119.79' + total_price_incl_tax_base: + - '363.0' + - '119.79' + cached_taxes: + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '63.0' + credit: 0 + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '20.79' + credit: 0 + updated_at: + - '2026-07-10T14:56:16.002+02:00' + - '2026-07-10T14:56:16.122+02:00' + created_at: '2026-07-10T12:56:16.133Z' + updated_at: '2026-07-10T12:56:16.133Z' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: patch_administration_id_documents_purchase_invoices_id + /{administration_id}/documents/purchase_invoices/{purchase_invoice_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: purchase_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '400': + $ref: '#/components/responses/400_bad_request' + operationId: delete_administration_id_documents_purchase_invoices_purchase_invoice_id_notes_id + /{administration_id}/documents/purchase_invoices/{purchase_invoice_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: purchase_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + $ref: '#/components/schemas/identifier' + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492273040422340540 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492273040446457822' + administration_id: 123 + entity_id: '492273040346843076' + entity_type: Document + user_id: '492272801297728613' + assignee_id: '492273040422340572' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:56:17.053Z' + updated_at: '2026-07-10T12:56:17.053Z' + '400': + $ref: '#/components/responses/400_bad_request' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_purchase_invoices_purchase_invoice_id_notes + /{administration_id}/documents/purchase_invoices{format}: + get: + summary: Get purchase invoices + description: |- + Returns a paginated list of documents of this type in the administration. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | + | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | + | recurring | `String` | `all` | `all`, `enabled` or `disabled` | + | attachment | `String` | `all` | `all`, `with` or `without` | + | reference | `String` | | Documents with the given reference value | + | contact_id | `Integer` | | Documents belonging to the given contact | + | ledger_account_id | `Integer` | | Documents booking against the given ledger account | + | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | + + Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. + schema: + type: string + default: period:this_year + - name: new_filter + in: query + required: false + schema: + type: string + description: 'String terms, example: `key1:value1,key2:value2`.' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of purchase invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/purchase_invoice_response' + examples: + ReturnsPaginatedPurchaseInvoicesOnPage1: + summary: Returns paginated purchase invoices on page 1 + value: + - id: '492273035570578471' + administration_id: 123 + contact_id: '492273035238180853' + contact: + id: '492273035238180853' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:12.085Z' + updated_at: '2026-07-10T12:56:12.085Z' + version: 1783688172 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 5 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:12.403Z' + updated_at: '2026-07-10T12:56:12.407Z' + version: 1783688172 + details: + - id: '492273035572675624' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:12.405Z' + updated_at: '2026-07-10T12:56:12.405Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:12.410Z' + updated_at: '2026-07-10T12:56:12.410Z' + ReturnsAListOfPurchaseInvoices: + summary: Returns a list of purchase invoices + value: + - id: '492273036245861541' + administration_id: 123 + contact_id: '492273035997348979' + contact: + id: '492273035997348979' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:12.810Z' + updated_at: '2026-07-10T12:56:12.810Z' + version: 1783688172 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 5 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:13.047Z' + updated_at: '2026-07-10T12:56:13.051Z' + version: 1783688173 + details: + - id: '492273036247958694' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:13.050Z' + updated_at: '2026-07-10T12:56:13.050Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:13.055Z' + updated_at: '2026-07-10T12:56:13.055Z' + - id: '492273036196578457' + administration_id: 123 + contact_id: '492273035997348979' + contact: + id: '492273035997348979' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:12.810Z' + updated_at: '2026-07-10T12:56:12.810Z' + version: 1783688172 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 4 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:13.001Z' + updated_at: '2026-07-10T12:56:13.004Z' + version: 1783688173 + details: + - id: '492273036198675610' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:13.003Z' + updated_at: '2026-07-10T12:56:13.003Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:13.008Z' + updated_at: '2026-07-10T12:56:13.008Z' + - id: '492273036143101069' + administration_id: 123 + contact_id: '492273035997348979' + contact: + id: '492273035997348979' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:12.810Z' + updated_at: '2026-07-10T12:56:12.810Z' + version: 1783688172 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:12.949Z' + updated_at: '2026-07-10T12:56:12.953Z' + version: 1783688172 + details: + - id: '492273036145198222' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:12.951Z' + updated_at: '2026-07-10T12:56:12.951Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:12.957Z' + updated_at: '2026-07-10T12:56:12.957Z' + - id: '492273036040340597' + administration_id: 123 + contact_id: '492273035997348979' + contact: + id: '492273035997348979' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:12.810Z' + updated_at: '2026-07-10T12:56:12.810Z' + version: 1783688172 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:12.851Z' + updated_at: '2026-07-10T12:56:12.855Z' + version: 1783688172 + details: + - id: '492273036042437750' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:12.853Z' + updated_at: '2026-07-10T12:56:12.853Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:12.859Z' + updated_at: '2026-07-10T12:56:12.859Z' + ReturnsPaginatedPurchaseInvoicesOnPage2: + summary: Returns paginated purchase invoices on page 2 + value: + - id: '492273036517442776' + administration_id: 123 + contact_id: '492273036331844786' + contact: + id: '492273036331844786' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:13.129Z' + updated_at: '2026-07-10T12:56:13.129Z' + version: 1783688173 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: 2013-01234 + date: '2026-07-10' + due_date: '2026-07-24' + entry_number: 4 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + created_at: '2026-07-10T12:56:13.306Z' + updated_at: '2026-07-10T12:56:13.311Z' + version: 1783688173 + details: + - id: '492273036520588505' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:13.309Z' + updated_at: '2026-07-10T12:56:13.309Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:13.314Z' + updated_at: '2026-07-10T12:56:13.314Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyPurchaseInvoicesAreRequested: + summary: Returns an error when too many purchase invoices are requested + value: + error: Per Page is too big + symbolic: + per_page: max + operationId: get_administration_id_documents_purchase_invoices + post: + summary: Create a new purchase invoice + description: |- + Creates a new purchase invoice. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Purchase invoices' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + purchase_invoice: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reference: + type: string + description: The supplier's invoice number or reference. + date: + type: string + description: The date on the supplier's invoice. + format: date + due_date: + type: string + description: The date by which the invoice should be paid. + format: date + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the purchase invoice are inclusive of tax. Defaults to the administration setting. + revenue_invoice: + type: + - boolean + - string + description: When `true`, this purchase invoice is treated as a revenue invoice (e.g. a credit note from a supplier). Revenue invoices are booked as income instead of expenses. + details_attributes: + $ref: '#/components/schemas/details_attributes' + fiscal_allocations_attributes: + $ref: '#/components/schemas/fiscal_allocations_attributes' + required: [] + required: [] + examples: + CreatesThePurchaseInvoice: + summary: Creates the purchase invoice + value: + purchase_invoice: + reference: foobar + contact_id: 492273034496837500 + details_attributes: + '0': + description: Lunch + price: 20 + tax_rate_id: 492272802329527400 + ledger_account_id: 492272802100937860 + CreatesADocumentWithFiscalAllocations: + summary: Creates a document with fiscal allocations + value: + purchase_invoice: + reference: with fiscal allocations + contact_id: 492273037899466240 + details_attributes: + - description: Test detail + price: 100 + tax_rate_id: 492272802329527400 + ledger_account_id: 492272802100937860 + fiscal_allocations_attributes: + - ledger_account_id: 492272802100937860 + private_ledger_account_id: 492273038002226700 + percentage: '30' + responses: + '201': + description: Purchase invoice created + content: + application/json: + schema: + $ref: '#/components/schemas/purchase_invoice_response' + examples: + CreatesThePurchaseInvoice: + summary: Creates the purchase invoice + value: + id: '492273034649929623' + administration_id: 123 + contact_id: '492273034496837501' + contact: + id: '492273034496837501' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:11.379Z' + updated_at: '2026-07-10T12:56:11.379Z' + version: 1783688171 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: foobar + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: api + paid_at: null + tax_number: null + total_price_excl_tax: '20.0' + total_price_excl_tax_base: '20.0' + total_price_incl_tax: '24.2' + total_price_incl_tax_base: '24.2' + created_at: '2026-07-10T12:56:11.525Z' + updated_at: '2026-07-10T12:56:11.530Z' + version: 1783688171 + details: + - id: '492273034653075352' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Lunch + price: '20.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '20.0' + total_price_excl_tax_with_discount_base: '20.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:11.528Z' + updated_at: '2026-07-10T12:56:11.528Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:11.533Z' + updated_at: '2026-07-10T12:56:11.533Z' + CreatesADocumentWithFiscalAllocations: + summary: Creates a document with fiscal allocations + value: + id: '492273038043121165' + administration_id: 123 + contact_id: '492273037899466226' + contact: + id: '492273037899466226' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:14.624Z' + updated_at: '2026-07-10T12:56:14.624Z' + version: 1783688174 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: with fiscal allocations + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: false + origin: api + paid_at: null + tax_number: null + total_price_excl_tax: '106.3' + total_price_excl_tax_base: '106.3' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + created_at: '2026-07-10T12:56:14.761Z' + updated_at: '2026-07-10T12:56:14.767Z' + version: 1783688174 + details: + - id: '492273038047315471' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Test detail + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '70.0' + total_price_excl_tax_with_discount_base: '70.0' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:14.765Z' + updated_at: '2026-07-10T12:56:14.765Z' + fiscal_allocations: + - id: '492273038045218318' + administration_id: 123 + ledger_account_id: '492272802100937849' + private_ledger_account_id: '492273038002226700' + percentage: '30.0' + price: '36.3' + price_base: '36.3' + created_at: '2026-07-10T12:56:14.764Z' + updated_at: '2026-07-10T12:56:14.764Z' + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:14.770Z' + updated_at: '2026-07-10T12:56:14.770Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RequiresAllInput: + summary: Requires all input + value: + error: Purchase Invoice is required + symbolic: + purchase_invoice: required + '402': + $ref: '#/components/responses/402_payment_required' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_purchase_invoices + /{administration_id}/documents/receipts/synchronization{format}: + get: + summary: List ids and versions of receipts + description: |- + Returns all documents in the administration. The list contains the document id and the version of the document. + Check if the version of the document is newer than the version you have stored locally, use the `POST` + variant for fetching documents with the given ids. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /documents/receipts` — see that operation's description for the available keys. + schema: + type: string + examples: + RetrievesAllIdsForSynchronizationUsingAFilter: + summary: Retrieves all ids for synchronization using a filter + value: period:this_month + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesAllIdsForSynchronization: + summary: Retrieves all ids for synchronization + value: + - id: '492273029228791777' + version: 1783688166 + - id: '492273029321066489' + version: 1783688166 + - id: '492273029365105669' + version: 1783688166 + RetrievesAllIdsForSynchronizationUsingAFilter: + summary: Retrieves all ids for synchronization using a filter + value: + - id: '492273029438506004' + version: 1783688166 + - id: '492273029524489260' + version: 1783688166 + - id: '492273029565383736' + version: 1783688166 + operationId: get_administration_id_documents_receipts_synchronization + post: + summary: Fetch receipts with given ids + description: |- + Given a list of document ids, returns the document information belonging to the documents. + Returns a maximum of 100 documents, even if more ids are provided. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + ids: + - 492273029086185400 + - 492273029127079900 + responses: + '200': + description: A list of receipts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/receipt_response' + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + - id: '492273029086185414' + administration_id: 123 + contact_id: '492273028969793452' + contact: + id: '492273028969793452' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:06.108Z' + updated_at: '2026-07-10T12:56:06.108Z' + version: 1783688166 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:06.219Z' + updated_at: '2026-07-10T12:56:06.223Z' + version: 1783688166 + details: + - id: '492273029088282567' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:06.221Z' + updated_at: '2026-07-10T12:56:06.221Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:06.226Z' + updated_at: '2026-07-10T12:56:06.226Z' + - id: '492273029127079890' + administration_id: 123 + contact_id: '492273028969793452' + contact: + id: '492273028969793452' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:06.108Z' + updated_at: '2026-07-10T12:56:06.108Z' + version: 1783688166 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 4 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:06.258Z' + updated_at: '2026-07-10T12:56:06.262Z' + version: 1783688166 + details: + - id: '492273029129177043' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:06.260Z' + updated_at: '2026-07-10T12:56:06.260Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:06.265Z' + updated_at: '2026-07-10T12:56:06.265Z' + operationId: post_administration_id_documents_receipts_synchronization + /{administration_id}/documents/receipts/{id}/attachments/{attachment_id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: '{"message":"Use the Location header to download the attachment"}' + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_documents_receipts_id_attachments_attachment_id_download + /{administration_id}/documents/receipts/{id}/attachments/{attachment_id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_receipts_id_attachments_attachment_id + /{administration_id}/documents/receipts/{id}/attachments{format}: + post: + summary: Add attachment to receipt + description: |- + Add an attachment to a receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + UploadsAnAttachment: + summary: Uploads an attachment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_receipts_id_attachments + /{administration_id}/documents/receipts/{id}/payments/{payment_id}{format}: + delete: + summary: Delete a payment + description: |- + Deletes a payment from a receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: payment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Payment deleted + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_receipts_id_payments_payment_id + /{administration_id}/documents/receipts/{id}/payments{format}: + post: + summary: Create a payment + description: |- + Registers a payment for a receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + description: The date on which the payment was made. + price: + $ref: '#/components/schemas/number' + description: The amount paid in the document's currency. Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. + transaction_identifier: + type: string + description: An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. + manual_payment_action: + type: string + description: Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + description: The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). + required: + - payment_date + - price + required: [] + examples: + CreateAPayment: + summary: Create a payment + value: + payment: + payment_date: '2026-07-10T12:56:01.547Z' + price: '300.0' + responses: + '201': + description: Payment created + content: + application/json: + schema: + $ref: '#/components/schemas/payment_response' + examples: + CreateAPayment: + summary: Create a payment + value: + id: '492273024204015522' + administration_id: 123 + invoice_type: Document + invoice_id: '492273024116983690' + financial_account_id: null + user_id: '492272801297728613' + payment_transaction_id: null + transaction_identifier: null + price: '300.0' + price_base: '300.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: null + ledger_account_id: '492272802141832322' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:56:01.564Z' + updated_at: '2026-07-10T12:56:01.564Z' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_receipts_id_payments + /{administration_id}/documents/receipts/{id}/register_payment{format}: + patch: + summary: Register a payment for a receipt + description: |- + This endpoint is deprecated and should no longer be used. It has been replaced by `Create a payment`. + + ### Required scope(s) + `documents` + deprecated: true + x-sunset: '2026-12-31' + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + price: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency. Required for foreign currencies. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial mutation id. + transaction_identifier: + type: string + manual_payment_action: + type: string + description: Can be `private_payment`, `payment_without_proof`, `cash_payment`, `rounding_error`, `bank_transfer`, `balance_settlement` or `invoices_settlement`. + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + required: + - payment_date + - price + required: [] + examples: + RegistersPayments: + summary: Registers payments + value: + payment: + payment_date: '2026-07-10T12:55:58.757Z' + price: '300.0' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + RegistersPayments: + summary: Registers payments + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: patch_administration_id_documents_receipts_id_register_payment + /{administration_id}/documents/receipts/{id}{format}: + get: + summary: Get a receipt + description: |- + Returns a receipt by id. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A receipt + content: + application/json: + schema: + $ref: '#/components/schemas/receipt_response' + examples: + ReturnsTheWantedReceipt: + summary: Returns the wanted receipt + value: + id: '492273025137247309' + administration_id: 123 + contact_id: '492273025106838603' + contact: + id: '492273025106838603' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:02.424Z' + updated_at: '2026-07-10T12:56:02.424Z' + version: 1783688162 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:02.453Z' + updated_at: '2026-07-10T12:56:02.457Z' + version: 1783688162 + details: + - id: '492273025139344462' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:02.455Z' + updated_at: '2026-07-10T12:56:02.455Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:02.461Z' + updated_at: '2026-07-10T12:56:02.461Z' + IncludesFiscalAllocations: + summary: Includes fiscal allocations + value: + id: '492273028388882210' + administration_id: 123 + contact_id: '492273028205381384' + contact: + id: '492273028205381384' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:05.379Z' + updated_at: '2026-07-10T12:56:05.379Z' + version: 1783688165 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:05.554Z' + updated_at: '2026-07-10T12:56:05.558Z' + version: 1783688165 + details: + - id: '492273028390979363' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:05.556Z' + updated_at: '2026-07-10T12:56:05.556Z' + fiscal_allocations: + - id: '492273028419290927' + administration_id: 123 + ledger_account_id: '492272802100937849' + private_ledger_account_id: '492273028415096622' + percentage: '25.0' + price: '75.0' + price_base: '75.0' + created_at: '2026-07-10T12:56:05.583Z' + updated_at: '2026-07-10T12:56:05.583Z' + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:05.562Z' + updated_at: '2026-07-10T12:56:05.562Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + OnlyReturnsReceipts: + summary: Only returns receipts + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_documents_receipts_id + delete: + summary: Delete a receipts + description: |- + Deletes a receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + DeletesTheReceipt: + summary: Deletes the receipt + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_receipts_id + patch: + summary: Update a receipt + description: |- + Updates a receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + receipt: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reference: + type: string + description: A reference for this receipt, e.g. a receipt number or supplier name. + date: + type: string + description: The date of the receipt. + format: date + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the receipt are inclusive of tax. + details_attributes: + $ref: '#/components/schemas/details_attributes' + fiscal_allocations_attributes: + $ref: '#/components/schemas/fiscal_allocations_attributes' + required: [] + payment: + type: object + unevaluatedProperties: false + properties: + financial_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial account id. + required: [] + required: [] + examples: + UpdatesTheReceiptDetails: + summary: Updates the receipt details + value: + receipt: + details_attributes: + '0': + id: 492273026620982660 + description: updated description + price: 20 + UpdatesTheReceipt: + summary: Updates the receipt + value: + receipt: + reference: updated reference + RemovesAFiscalAllocationWithDestroy: + summary: Removes a fiscal allocation with destroy + value: + receipt: + fiscal_allocations_attributes: + '0': + id: 492273028626909000 + _destroy: true + AddsFiscalAllocationsToAnExistingDocument: + summary: Adds fiscal allocations to an existing document + value: + receipt: + fiscal_allocations_attributes: + - ledger_account_id: 492272802100937860 + private_ledger_account_id: 492273028871227260 + percentage: '40' + responses: + '200': + description: Receipt updated + content: + application/json: + schema: + $ref: '#/components/schemas/receipt_response' + examples: + UpdatesTheReceiptDetails: + summary: Updates the receipt details + value: + id: '492273026618885530' + administration_id: 123 + contact_id: '492273026593719704' + contact: + id: '492273026593719704' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:03.842Z' + updated_at: '2026-07-10T12:56:03.842Z' + version: 1783688163 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '16.53' + total_price_excl_tax_base: '16.53' + total_price_incl_tax: '20.0' + total_price_incl_tax_base: '20.0' + created_at: '2026-07-10T12:56:03.866Z' + updated_at: '2026-07-10T12:56:03.968Z' + version: 1783688163 + details: + - id: '492273026620982683' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: updated description + price: '20.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '16.53' + total_price_excl_tax_with_discount_base: '16.53' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:03.868Z' + updated_at: '2026-07-10T12:56:03.966Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:03.873Z' + updated_at: '2026-07-10T12:56:03.873Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: + total_price_excl_tax: + - '247.93' + - '16.53' + total_price_excl_tax_base: + - '247.93' + - '16.53' + total_price_incl_tax: + - '300.0' + - '20.0' + total_price_incl_tax_base: + - '300.0' + - '20.0' + cached_taxes: + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '52.07' + credit: 0 + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '3.47' + credit: 0 + updated_at: + - '2026-07-10T14:56:03.870+02:00' + - '2026-07-10T14:56:03.965+02:00' + created_at: '2026-07-10T12:56:03.971Z' + updated_at: '2026-07-10T12:56:03.971Z' + UpdatesTheReceipt: + summary: Updates the receipt + value: + id: '492273026809726408' + administration_id: 123 + contact_id: '492273026784560582' + contact: + id: '492273026784560582' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:04.024Z' + updated_at: '2026-07-10T12:56:04.024Z' + version: 1783688164 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: updated reference + date: '2026-07-10' + due_date: null + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:04.049Z' + updated_at: '2026-07-10T12:56:04.141Z' + version: 1783688164 + details: + - id: '492273026812872137' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:04.051Z' + updated_at: '2026-07-10T12:56:04.051Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:04.056Z' + updated_at: '2026-07-10T12:56:04.056Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: + reference: + - Lunch supermarket + - updated reference + updated_at: + - '2026-07-10T14:56:04.053+02:00' + - '2026-07-10T14:56:04.141+02:00' + created_at: '2026-07-10T12:56:04.146Z' + updated_at: '2026-07-10T12:56:04.146Z' + RemovesAFiscalAllocationWithDestroy: + summary: Removes a fiscal allocation with destroy + value: + id: '492273028596500299' + administration_id: 123 + contact_id: '492273028471719729' + contact: + id: '492273028471719729' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:05.633Z' + updated_at: '2026-07-10T12:56:05.633Z' + version: 1783688165 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:05.752Z' + updated_at: '2026-07-10T12:56:05.756Z' + version: 1783688165 + details: + - id: '492273028598597452' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:05.754Z' + updated_at: '2026-07-10T12:56:05.754Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:05.760Z' + updated_at: '2026-07-10T12:56:05.760Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: {} + created_at: '2026-07-10T12:56:05.816Z' + updated_at: '2026-07-10T12:56:05.816Z' + AddsFiscalAllocationsToAnExistingDocument: + summary: Adds fiscal allocations to an existing document + value: + id: '492273028848158599' + administration_id: 123 + contact_id: '492273028720232301' + contact: + id: '492273028720232301' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:05.870Z' + updated_at: '2026-07-10T12:56:05.870Z' + version: 1783688165 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '268.76' + total_price_excl_tax_base: '268.76' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:05.992Z' + updated_at: '2026-07-10T12:56:06.052Z' + version: 1783688166 + details: + - id: '492273028850255752' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '148.76' + total_price_excl_tax_with_discount_base: '148.76' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:05.994Z' + updated_at: '2026-07-10T12:56:06.051Z' + fiscal_allocations: + - id: '492273028907927444' + administration_id: 123 + ledger_account_id: '492272802100937849' + private_ledger_account_id: '492273028871227283' + percentage: '40.0' + price: '120.0' + price_base: '120.0' + created_at: '2026-07-10T12:56:06.049Z' + updated_at: '2026-07-10T12:56:06.049Z' + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:05.998Z' + updated_at: '2026-07-10T12:56:05.998Z' + - administration_id: 123 + user_id: '492272801297728613' + action: document_updated + link_entity_id: null + link_entity_type: null + data: + changes: + total_price_excl_tax: + - '247.93' + - '268.76' + total_price_excl_tax_base: + - '247.93' + - '268.76' + cached_taxes: + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '52.07' + credit: 0 + - - tax_rate_id: '492272802329527437' + report_reference: NL/5b + payable: false + debit: '31.24' + credit: 0 + updated_at: + - '2026-07-10T14:56:05.995+02:00' + - '2026-07-10T14:56:06.047+02:00' + created_at: '2026-07-10T12:56:06.055Z' + updated_at: '2026-07-10T12:56:06.055Z' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: patch_administration_id_documents_receipts_id + /{administration_id}/documents/receipts/{receipt_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: receipt_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '400': + $ref: '#/components/responses/400_bad_request' + operationId: delete_administration_id_documents_receipts_receipt_id_notes_id + /{administration_id}/documents/receipts/{receipt_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: receipt_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + $ref: '#/components/schemas/identifier' + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492273025050215500 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492273025072235592' + administration_id: 123 + entity_id: '492273024970523694' + entity_type: Document + user_id: '492272801297728613' + assignee_id: '492273025050215494' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:56:02.391Z' + updated_at: '2026-07-10T12:56:02.391Z' + '400': + $ref: '#/components/responses/400_bad_request' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_receipts_receipt_id_notes + /{administration_id}/documents/receipts{format}: + get: + summary: List receipts + description: |- + Returns a paginated list of documents of this type in the administration. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | + | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | + | recurring | `String` | `all` | `all`, `enabled` or `disabled` | + | attachment | `String` | `all` | `all`, `with` or `without` | + | reference | `String` | | Documents with the given reference value | + | contact_id | `Integer` | | Documents belonging to the given contact | + | ledger_account_id | `Integer` | | Documents booking against the given ledger account | + | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | + + Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. + schema: + type: string + default: period:this_year + - name: new_filter + in: query + required: false + schema: + type: string + description: 'String terms, example: `key1:value1,key2:value2`.' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of receipts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/receipt_response' + examples: + ReturnsPaginatedReceiptsOnPage2: + summary: Returns paginated receipts on page 2 + value: + - id: '492273025536754855' + administration_id: 123 + contact_id: '492273025388905601' + contact: + id: '492273025388905601' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:02.693Z' + updated_at: '2026-07-10T12:56:02.693Z' + version: 1783688162 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 4 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:02.835Z' + updated_at: '2026-07-10T12:56:02.838Z' + version: 1783688162 + details: + - id: '492273025538852008' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:02.837Z' + updated_at: '2026-07-10T12:56:02.837Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:02.841Z' + updated_at: '2026-07-10T12:56:02.841Z' + ReturnsPaginatedReceiptsOnPage1: + summary: Returns paginated receipts on page 1 + value: + - id: '492273025854473458' + administration_id: 123 + contact_id: '492273025666778304' + contact: + id: '492273025666778304' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:02.958Z' + updated_at: '2026-07-10T12:56:02.958Z' + version: 1783688162 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 5 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:03.137Z' + updated_at: '2026-07-10T12:56:03.141Z' + version: 1783688163 + details: + - id: '492273025856570611' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:03.139Z' + updated_at: '2026-07-10T12:56:03.139Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:03.143Z' + updated_at: '2026-07-10T12:56:03.143Z' + ReturnsAListOfReceipts: + summary: Returns a list of receipts + value: + - id: '492273026133394737' + administration_id: 123 + contact_id: '492273025940456703' + contact: + id: '492273025940456703' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:03.219Z' + updated_at: '2026-07-10T12:56:03.219Z' + version: 1783688163 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 5 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:03.403Z' + updated_at: '2026-07-10T12:56:03.407Z' + version: 1783688163 + details: + - id: '492273026135491890' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:03.405Z' + updated_at: '2026-07-10T12:56:03.405Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:03.410Z' + updated_at: '2026-07-10T12:56:03.410Z' + - id: '492273026092500261' + administration_id: 123 + contact_id: '492273025940456703' + contact: + id: '492273025940456703' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:03.219Z' + updated_at: '2026-07-10T12:56:03.219Z' + version: 1783688163 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 4 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:03.364Z' + updated_at: '2026-07-10T12:56:03.368Z' + version: 1783688163 + details: + - id: '492273026094597414' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:03.366Z' + updated_at: '2026-07-10T12:56:03.366Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:03.371Z' + updated_at: '2026-07-10T12:56:03.371Z' + - id: '492273026052654361' + administration_id: 123 + contact_id: '492273025940456703' + contact: + id: '492273025940456703' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:03.219Z' + updated_at: '2026-07-10T12:56:03.219Z' + version: 1783688163 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:03.326Z' + updated_at: '2026-07-10T12:56:03.330Z' + version: 1783688163 + details: + - id: '492273026054751514' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:03.328Z' + updated_at: '2026-07-10T12:56:03.328Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:03.333Z' + updated_at: '2026-07-10T12:56:03.333Z' + - id: '492273025964573953' + administration_id: 123 + contact_id: '492273025940456703' + contact: + id: '492273025940456703' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:03.219Z' + updated_at: '2026-07-10T12:56:03.219Z' + version: 1783688163 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: Lunch supermarket + date: '2026-07-10' + due_date: null + entry_number: 1 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '247.93' + total_price_excl_tax_base: '247.93' + total_price_incl_tax: '300.0' + total_price_incl_tax_base: '300.0' + created_at: '2026-07-10T12:56:03.242Z' + updated_at: '2026-07-10T12:56:03.246Z' + version: 1783688163 + details: + - id: '492273025966671106' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Delivery Apple iPad + price: '300.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '247.93' + total_price_excl_tax_with_discount_base: '247.93' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:03.244Z' + updated_at: '2026-07-10T12:56:03.244Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:03.249Z' + updated_at: '2026-07-10T12:56:03.249Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyReceiptsAreRequested: + summary: Returns an error when too many receipts are requested + value: + error: Per Page is too big + symbolic: + per_page: max + operationId: get_administration_id_documents_receipts + post: + summary: Create a new receipt + description: |- + Creates a new receipt. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Receipts' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + receipt: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reference: + type: string + description: A reference for this receipt, e.g. a receipt number or supplier name. + date: + type: string + description: The date of the receipt. + format: date + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the receipt are inclusive of tax. Defaults to the administration setting. + details_attributes: + $ref: '#/components/schemas/details_attributes' + fiscal_allocations_attributes: + $ref: '#/components/schemas/fiscal_allocations_attributes' + required: [] + payment: + type: object + unevaluatedProperties: false + properties: + financial_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial account id. + required: [] + required: [] + examples: + CreatesTheReceipt: + summary: Creates the receipt + value: + receipt: + reference: foobar + contact_id: 492273021698967100 + details_attributes: + '0': + description: Lunch + price: 20 + tax_rate_id: 492272802329527400 + ledger_account_id: 492272802100937860 + CreatesADocumentWithFiscalAllocations: + summary: Creates a document with fiscal allocations + value: + receipt: + reference: with fiscal allocations + contact_id: 492273027876128450 + details_attributes: + - description: Test detail + price: 100 + tax_rate_id: 492272802329527400 + ledger_account_id: 492272802100937860 + fiscal_allocations_attributes: + - ledger_account_id: 492272802100937860 + private_ledger_account_id: 492273027970500300 + percentage: '30' + responses: + '201': + description: Receipt created + content: + application/json: + schema: + $ref: '#/components/schemas/receipt_response' + examples: + CreatesTheReceipt: + summary: Creates the receipt + value: + id: '492273021825844805' + administration_id: 123 + contact_id: '492273021698967083' + contact: + id: '492273021698967083' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:55:59.173Z' + updated_at: '2026-07-10T12:55:59.173Z' + version: 1783688159 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: foobar + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '16.53' + total_price_excl_tax_base: '16.53' + total_price_incl_tax: '20.0' + total_price_incl_tax_base: '20.0' + created_at: '2026-07-10T12:55:59.295Z' + updated_at: '2026-07-10T12:55:59.299Z' + version: 1783688159 + details: + - id: '492273021827941958' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Lunch + price: '20.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '16.53' + total_price_excl_tax_with_discount_base: '16.53' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:55:59.297Z' + updated_at: '2026-07-10T12:55:59.297Z' + fiscal_allocations: [] + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:59.302Z' + updated_at: '2026-07-10T12:55:59.302Z' + CreatesADocumentWithFiscalAllocations: + summary: Creates a document with fiscal allocations + value: + id: '492273028007200475' + administration_id: 123 + contact_id: '492273027876128448' + contact: + id: '492273027876128448' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:05.065Z' + updated_at: '2026-07-10T12:56:05.065Z' + version: 1783688165 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: with fiscal allocations + date: '2026-07-10' + due_date: null + entry_number: 3 + state: open + currency: EUR + exchange_rate: '1.0' + revenue_invoice: false + prices_are_incl_tax: true + origin: null + paid_at: null + tax_number: null + total_price_excl_tax: '87.85' + total_price_excl_tax_base: '87.85' + total_price_incl_tax: '100.0' + total_price_incl_tax_base: '100.0' + created_at: '2026-07-10T12:56:05.191Z' + updated_at: '2026-07-10T12:56:05.196Z' + version: 1783688165 + details: + - id: '492273028011394781' + administration_id: 123 + tax_rate_id: '492272802329527437' + ledger_account_id: '492272802100937849' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Test detail + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '57.85' + total_price_excl_tax_with_discount_base: '57.85' + tax_report_reference: + - NL/5b + mandatory_tax_text: null + created_at: '2026-07-10T12:56:05.195Z' + updated_at: '2026-07-10T12:56:05.195Z' + fiscal_allocations: + - id: '492273028009297628' + administration_id: 123 + ledger_account_id: '492272802100937849' + private_ledger_account_id: '492273027970500314' + percentage: '30.0' + price: '30.0' + price_base: '30.0' + created_at: '2026-07-10T12:56:05.193Z' + updated_at: '2026-07-10T12:56:05.193Z' + payments: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:05.199Z' + updated_at: '2026-07-10T12:56:05.199Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RequiresAllInput: + summary: Requires all input + value: + error: Receipt is required + symbolic: + receipt: required + '402': + $ref: '#/components/responses/402_payment_required' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_receipts + /{administration_id}/documents/typeless_documents/synchronization{format}: + get: + summary: List ids and versions of typeless documents + description: |- + Returns all documents in the administration. The list contains the document id and the version of the document. + Check if the version of the document is newer than the version you have stored locally, use the `POST` + variant for fetching documents with the given ids. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /documents/typeless_documents` — see that operation's description for the available keys. + schema: + type: string + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesAllIdsForSynchronization: + summary: Retrieves all ids for synchronization + value: + - id: '492273047033612215' + version: 1783688183 + - id: '492273047047243705' + version: 1783688183 + - id: '492273047060875195' + version: 1783688183 + operationId: get_administration_id_documents_typeless_documents_synchronization + post: + summary: Fetch typeless documents with given ids + description: |- + Given a list of document ids, returns the document information belonging to the documents. + Returns a maximum of 100 documents, even if more ids are provided. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + ids: + - 492273047173072830 + - 492273047187752900 + responses: + '200': + description: A list of typeless documents + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/typeless_document_response' + examples: + RetrievesDocumentsForGivenIds: + summary: Retrieves documents for given ids + value: + - id: '492273047173072846' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.468Z' + updated_at: '2026-07-10T12:56:23.468Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.472Z' + updated_at: '2026-07-10T12:56:23.472Z' + - id: '492273047187752912' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.482Z' + updated_at: '2026-07-10T12:56:23.482Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.486Z' + updated_at: '2026-07-10T12:56:23.486Z' + operationId: post_administration_id_documents_typeless_documents_synchronization + /{administration_id}/documents/typeless_documents/{id}/attachments/{attachment_id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: '{"message":"Use the Location header to download the attachment"}' + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_documents_typeless_documents_id_attachments_attachment_id_download + /{administration_id}/documents/typeless_documents/{id}/attachments/{attachment_id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: attachment_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_typeless_documents_id_attachments_attachment_id + /{administration_id}/documents/typeless_documents/{id}/attachments{format}: + post: + summary: Add attachment to typeless document + description: |- + Add an attachment to a typeless document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + UploadsAnAttachment: + summary: Uploads an attachment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_typeless_documents_id_attachments + /{administration_id}/documents/typeless_documents/{id}{format}: + get: + summary: Get a typeless document + description: |- + Returns a typeless document by id. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A typeless document + content: + application/json: + schema: + $ref: '#/components/schemas/typeless_document_response' + examples: + ReturnsTheWantedTypelessDocument: + summary: Returns the wanted typeless document + value: + id: '492273047859889213' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:24.123Z' + updated_at: '2026-07-10T12:56:24.123Z' + version: 1783688184 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:24.127Z' + updated_at: '2026-07-10T12:56:24.127Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + OnlyReturnsTypelessDocuments: + summary: Only returns typeless documents + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_documents_typeless_documents_id + delete: + summary: Delete a typeless document + description: |- + Deletes a typeless document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + DeletesTheTypelessDocument: + summary: Deletes the typeless document + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_documents_typeless_documents_id + /{administration_id}/documents/typeless_documents{format}: + get: + summary: Get typeless documents + description: |- + Returns a paginated list of documents of this type in the administration. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | + | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | + | recurring | `String` | `all` | `all`, `enabled` or `disabled` | + | attachment | `String` | `all` | `all`, `with` or `without` | + | reference | `String` | | Documents with the given reference value | + | contact_id | `Integer` | | Documents belonging to the given contact | + | ledger_account_id | `Integer` | | Documents booking against the given ledger account | + | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | + + Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. + schema: + type: string + default: period:this_year + - name: new_filter + in: query + required: false + schema: + type: string + description: 'String terms, example: `key1:value1,key2:value2`.' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of typeless documents + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/typeless_document_response' + examples: + ReturnsPaginatedTypelessDocumentsOnPage2: + summary: Returns paginated typeless documents on page 2 + value: + - id: '492273047325116389' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.613Z' + updated_at: '2026-07-10T12:56:23.613Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.616Z' + updated_at: '2026-07-10T12:56:23.616Z' + ReturnsPaginatedTypelessDocumentsOnPage1: + summary: Returns paginated typeless documents on page 1 + value: + - id: '492273047480305662' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.761Z' + updated_at: '2026-07-10T12:56:23.761Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.765Z' + updated_at: '2026-07-10T12:56:23.765Z' + ReturnsAListOfTypelessDocuments: + summary: Returns a list of typeless documents + value: + - id: '492273047623959573' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.898Z' + updated_at: '2026-07-10T12:56:23.898Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.901Z' + updated_at: '2026-07-10T12:56:23.901Z' + - id: '492273047610328083' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.885Z' + updated_at: '2026-07-10T12:56:23.885Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.889Z' + updated_at: '2026-07-10T12:56:23.889Z' + - id: '492273047597745169' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.873Z' + updated_at: '2026-07-10T12:56:23.873Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.877Z' + updated_at: '2026-07-10T12:56:23.877Z' + - id: '492273047585162255' + administration_id: 123 + contact_id: null + contact: null + reference: '20130456' + date: '2026-07-10' + state: new + origin: null + created_at: '2026-07-10T12:56:23.861Z' + updated_at: '2026-07-10T12:56:23.861Z' + version: 1783688183 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:23.864Z' + updated_at: '2026-07-10T12:56:23.864Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyTypelessDocumentsAreRequested: + summary: Returns an error when too many typeless documents are requested + value: + error: Per Page is too big + symbolic: + per_page: max + operationId: get_administration_id_documents_typeless_documents + post: + summary: Create a new typeless document + description: |- + Creates a new typeless document. + + ### Required scope(s) + `documents` + tags: + - 'Documents: Typeless documents' + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + typeless_document: + type: object + unevaluatedProperties: false + properties: + reference: + type: string + date: + type: string + format: date + description: Date of the document. Defaults to today. + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + required: [] + required: [] + examples: + CreatesTheTypelessDocument: + summary: Creates the typeless document + value: + typeless_document: + reference: foobar + contact_id: 492273046211528500 + responses: + '201': + description: Typeless document created + content: + application/json: + schema: + $ref: '#/components/schemas/typeless_document_response' + examples: + CreatesTheTypelessDocument: + summary: Creates the typeless document + value: + id: '492273046299608895' + administration_id: 123 + contact_id: '492273046211528495' + contact: + id: '492273046211528495' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:22.550Z' + updated_at: '2026-07-10T12:56:22.550Z' + version: 1783688182 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + reference: foobar + date: '2026-07-10' + state: new + origin: api + created_at: '2026-07-10T12:56:22.635Z' + updated_at: '2026-07-10T12:56:22.635Z' + version: 1783688182 + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: document_saved + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:22.639Z' + updated_at: '2026-07-10T12:56:22.639Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RequiresAllInput: + summary: Requires all input + value: + error: Typeless Document is required + symbolic: + typeless_document: required + '402': + $ref: '#/components/responses/402_payment_required' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_documents_typeless_documents + /{administration_id}/downloads/{id}/download{format}: + post: + summary: Download a file + description: |- + Returns a redirect to the actual file download URL. + The required permission scope depends on the download's type (for example `export_documents` requires `documents`, `export_sales_invoices` requires `sales_invoices`, `export_contacts` requires `contacts`, and report exports require the same permissions as the corresponding report). The token must have the permission matching the download type. + The response is a 302 redirect. The client should follow the `Location` header to download the actual file. The link is valid for 30 seconds. + tags: + - Downloads + security: + - bearerAuth: [] + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + description: The download ID + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + RedirectsToTheDownloadLink: + summary: Redirects to the download link + value: '{"message":"Use the Location header to download the file"}' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksPermission: + summary: Returns 401 when user lacks permission + value: + error: No access to [:sales_invoices] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenDownloadDoesNotExist: + summary: Returns 404 when download does not exist + value: + error: 'Record not found for model name: Download' + operationId: post_administration_id_downloads_id_download + /{administration_id}/downloads{format}: + get: + summary: List all downloads + description: |- + Returns a paginated list of all downloads in the administration. + + Only downloads that the authenticated user has permission to access will be returned, + based on the download type and the user's permissions within the administration. + tags: + - Downloads + security: + - bearerAuth: [] + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/per_page' + - $ref: '#/components/parameters/page' + - name: download_type + in: query + required: false + schema: + type: string + description: | + Filter downloads by type. Common download types include: + - `auditfile` + - `brugstaat` + - `export_ledger_account_report` + + Check the `download_type` field in the response to see all available types. + examples: + ReturnsDownloadsByDownloadType: + summary: Returns downloads by download type + value: export_contacts + - name: downloaded + in: query + required: false + schema: + type: + - boolean + - string + examples: + ReturnsDownloadsByDownloadedStatus: + summary: Returns downloads by downloaded status + value: 'true' + - name: failed + in: query + required: false + schema: + type: + - boolean + - string + examples: + ReturnsDownloadsByFailedStatus: + summary: Returns downloads by failed status + value: 'true' + responses: + '200': + description: A list of downloads + headers: + Link: + $ref: '#/components/headers/link' + X-Total-Count: + $ref: '#/components/headers/x-total-count' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/download_response' + examples: + ReturnsAllDownloadsOfAnAdministration: + summary: Returns all downloads of an administration + value: + - id: '492273013247444402' + user_id: null + download_type: export_documents + filename: Unknown + content_type: application/octet-stream + failed: true + downloaded: false + created_at: '2026-07-10T12:55:51.114Z' + updated_at: '2026-07-10T12:55:51.114Z' + - id: '492273013245347249' + user_id: null + download_type: export_sales_invoices + filename: Unknown + content_type: application/octet-stream + failed: false + downloaded: true + created_at: '2026-07-10T12:55:51.112Z' + updated_at: '2026-07-10T12:55:51.112Z' + - id: '492273013243250096' + user_id: null + download_type: export_contacts + filename: Unknown + content_type: application/octet-stream + failed: false + downloaded: false + created_at: '2026-07-10T12:55:51.110Z' + updated_at: '2026-07-10T12:55:51.110Z' + ReturnsPaginatedDownloads: + summary: Returns paginated downloads + value: + - id: '492273013317698996' + user_id: null + download_type: export_sales_invoices + filename: Unknown + content_type: application/octet-stream + failed: false + downloaded: true + created_at: '2026-07-10T12:55:51.181Z' + updated_at: '2026-07-10T12:55:51.181Z' + ReturnsDownloadsByFailedStatus: + summary: Returns downloads by failed status + value: + - id: '492273013366982072' + user_id: null + download_type: export_documents + filename: Unknown + content_type: application/octet-stream + failed: true + downloaded: false + created_at: '2026-07-10T12:55:51.228Z' + updated_at: '2026-07-10T12:55:51.228Z' + ReturnsDownloadsByDownloadType: + summary: Returns downloads by download type + value: + - id: '492273013434090940' + user_id: null + download_type: export_contacts + filename: Unknown + content_type: application/octet-stream + failed: false + downloaded: false + created_at: '2026-07-10T12:55:51.292Z' + updated_at: '2026-07-10T12:55:51.292Z' + ReturnsDownloadsByDownloadedStatus: + summary: Returns downloads by downloaded status + value: + - id: '492273013485471168' + user_id: null + download_type: export_sales_invoices + filename: Unknown + content_type: application/octet-stream + failed: false + downloaded: true + created_at: '2026-07-10T12:55:51.341Z' + updated_at: '2026-07-10T12:55:51.341Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenDownloadTypeIsInvalid: + summary: Returns an error when download type is invalid + value: + error: download_type does not have a valid value + ReturnsAnErrorWhenPerPageExceedsLimit: + summary: Returns an error when per page exceeds limit + value: + error: per_page does not have a valid value + operationId: get_administration_id_downloads + /{administration_id}/estimates/find_by_estimate_id/{estimate_id}{format}: + get: + summary: Get an estimate by estimate_id + description: |- + Returns all information about an estimate with the given estimate id + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: estimate_id + in: path + required: true + schema: + type: string + description: Unique record identifier + example: 2025-0001 + - $ref: '#/components/parameters/format' + responses: + '200': + description: An estimate + content: + application/json: + schema: + $ref: '#/components/schemas/estimate_response' + examples: + ReturnsEstimateByGivenEstimateId: + summary: Returns estimate by given estimate + value: + id: '492273051564508426' + administration_id: 123 + contact_id: '492273051520468229' + contact: + id: '492273051520468229' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:27.614Z' + updated_at: '2026-07-10T12:56:27.614Z' + version: 1783688187 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273051524662535' + contact_person: + id: null + contact_id: '492273051520468229' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:27.619Z' + updated_at: '2026-07-10T12:56:27.619Z' + version: 1783688187 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:27.656Z' + updated_at: '2026-07-10T12:56:27.723Z' + public_view_code: '429624' + public_view_code_expires_at: '2026-10-10T12:56:27.691Z' + version: 1783688187 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273051567654155' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:27.659Z' + updated_at: '2026-07-10T12:56:27.721Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/266a46dc8eec8946c8c871783d37e7a3587a1c1c2b8f6d4aa91eb89c8d663833/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:27.665Z' + updated_at: '2026-07-10T12:56:27.665Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:27.731Z' + updated_at: '2026-07-10T12:56:27.731Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RespondsWithA404CodeWhenEstimateDoesNotExist: + summary: Responds with a 404 code when estimate does not exist + value: + error: 'Estimate with estimate_id: 0 was not found' + symbolic: + estimate_id: not_found + operationId: get_administration_id_estimates_find_by_estimate_id_estimate_id + /{administration_id}/estimates/synchronization{format}: + get: + summary: List all ids and versions + description: |- + Returns all estimates in the administration. The list contains the id and version of the estimate. + If the version of the estimate is newer than the version you have stored locally, use the `POST` + variant to fetch estimates with the given ids. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /estimates` — see that operation's description for the available keys. + schema: + type: string + examples: + ReturnsUniqueIdsEvenWhenEstimatesHaveMultipleAttachments: + summary: Returns unique ids even when estimates have multiple attachments + value: state:open + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + ReturnsUniqueIdsEvenWhenEstimatesHaveMultipleAttachments: + summary: Returns unique ids even when estimates have multiple attachments + value: + - id: '492273058095040126' + version: 1783688194 + RetrievesTheIdsForSynchronization: + summary: Retrieves the ids for synchronization + value: + - id: '492273058450507411' + version: 1783688194 + - id: '492273058320483982' + version: 1783688194 + RetrievesTheIdsForSynchronizationFilteredOnState: + summary: Retrieves the ids for synchronization filtered on state + value: + - id: '492273058535442076' + version: 1783688194 + operationId: get_administration_id_estimates_synchronization + post: + summary: Fetch estimates with given ids + description: |- + Given a list of estimate ids, returns the estimate information belonging to the estimates. + Returns a maximum of 100 estimates, even if more ids are provided. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesEstimatesByGivenIds: + summary: Retrieves estimates by given ids + value: + ids: + - 492273049503007900 + - 492273049630934140 + responses: + '200': + description: A list of estimates + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/estimate_response' + examples: + RetrievesEstimatesByGivenIds: + summary: Retrieves estimates by given ids + value: + - id: '492273049503007888' + administration_id: 123 + contact_id: '492273049451627659' + contact: + id: '492273049451627659' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:25.641Z' + updated_at: '2026-07-10T12:56:25.641Z' + version: 1783688185 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273049456870541' + contact_person: + id: null + contact_id: '492273049451627659' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:25.646Z' + updated_at: '2026-07-10T12:56:25.646Z' + version: 1783688185 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:25.690Z' + updated_at: '2026-07-10T12:56:25.762Z' + public_view_code: '444819' + public_view_code_expires_at: '2026-10-10T12:56:25.727Z' + version: 1783688185 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273049506153617' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:25.693Z' + updated_at: '2026-07-10T12:56:25.761Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/5506fe14346b5ed3849a319d26f739fa28a413d23b2ee53d3d9d98146398d3a9/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:25.698Z' + updated_at: '2026-07-10T12:56:25.698Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:25.772Z' + updated_at: '2026-07-10T12:56:25.772Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273049630934165' + administration_id: 123 + contact_id: '492273049451627659' + contact: + id: '492273049451627659' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:25.641Z' + updated_at: '2026-07-10T12:56:25.641Z' + version: 1783688185 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: + - id: '492273049456870541' + contact_id: '492273049451627659' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:25.646Z' + updated_at: '2026-07-10T12:56:25.646Z' + version: 1783688185 + archived: false + contact_person_id: null + contact_person: null + estimate_id: null + estimate_sequence_id: null + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 2 + state: draft + estimate_date: null + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: null + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:25.812Z' + updated_at: '2026-07-10T12:56:25.816Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688185 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273049633031318' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:25.814Z' + updated_at: '2026-07-10T12:56:25.814Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/d01a970b540dbf634a5c7f6a5b27fa0975daba7ce277e48f6c57cb9a999259f0/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:25.819Z' + updated_at: '2026-07-10T12:56:25.819Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400IfIdsParamIsMissing: + summary: Returns 400 if ids param is missing + value: + error: Ids is required + symbolic: + ids: required + operationId: post_administration_id_estimates_synchronization + /{administration_id}/estimates/{estimate_id}/attachments/{id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: estimate_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: '{"message":"Use the Location header to download the attachment"}' + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_estimates_estimate_id_attachments_id_download + /{administration_id}/estimates/{estimate_id}/attachments/{id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: estimate_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_estimates_estimate_id_attachments_id + /{administration_id}/estimates/{estimate_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: estimate_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfTheIdIsWrong: + summary: Returns 404 if the id is wrong + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_estimates_estimate_id_notes_id + /{administration_id}/estimates/{estimate_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: estimate_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + type: + - integer + - string + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreatesANote: + summary: Creates a note + value: + note: + note: A pending TODO + assignee_id: 492273050086016200 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreatesANote: + summary: Creates a note + value: + id: '492273050109084851' + administration_id: 123 + entity_id: '492273049988498604' + entity_type: Estimate + user_id: '492272801297728613' + assignee_id: '492273050086016177' + todo: true + note: A pending TODO + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:56:26.268Z' + updated_at: '2026-07-10T12:56:26.268Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400IfTheEstimateDoesNotExist: + summary: Returns 400 if the estimate does not exist + value: + error: Entity is invalid; User has no permissions to notes for Estimate + symbolic: + entity: not_found + user: insufficient_permissions + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422IfTheNoteIsInvalid: + summary: Returns 422 if the note is invalid + value: + error: + note: + - can't be blank + todo_type: + - can't be blank + details: + note: + - error: blank + todo_type: + - error: blank + operationId: post_administration_id_estimates_estimate_id_notes + /{administration_id}/estimates/{id}/attachments{format}: + post: + summary: Add attachment to estimate + description: |- + Add an attachment to an estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + UploadsAnAttachment: + summary: Uploads an attachment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_estimates_id_attachments + /{administration_id}/estimates/{id}/bill_estimate{format}: + patch: + summary: Bills an estimate + description: |- + An invoice is created based on the accepted estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + examples: + BillsAnOpenEstimate: + summary: Bills an open estimate + value: {} + BillsAnAcceptedEstimate: + summary: Bills an accepted estimate + value: {} + responses: + '200': + description: Estimate billed + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + BillsAnOpenEstimate: + summary: Bills an open estimate + value: + id: '492273054512055719' + administration_id: 123 + contact_id: '492273054169171351' + contact: + id: '492273054169171351' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:30.140Z' + updated_at: '2026-07-10T12:56:30.140Z' + version: 1783688190 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: + - id: '492273054174414233' + contact_id: '492273054169171351' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:30.145Z' + updated_at: '2026-07-10T12:56:30.145Z' + version: 1783688190 + archived: false + contact_person_id: null + contact_person: null + invoice_id: null + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 1 + state: draft + invoice_date: null + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: null + short_payment_reference: null + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: null + created_at: '2026-07-10T12:56:30.467Z' + updated_at: '2026-07-10T12:56:30.473Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688190 + details: + - id: '492273054516250024' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:30.471Z' + updated_at: '2026-07-10T12:56:30.471Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: null + original_estimate_id: '492273054343234977' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/69e45b0307d975adc246abd79f4f290500077e3427e4a5063c76f6094714dc3d/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/69e45b0307d975adc246abd79f4f290500077e3427e4a5063c76f6094714dc3d/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created_based_on_estimate + link_entity_id: null + link_entity_type: null + data: + original_estimate: 2026-0002 + created_at: '2026-07-10T12:56:30.477Z' + updated_at: '2026-07-10T12:56:30.477Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + BillsAnAcceptedEstimate: + summary: Bills an accepted estimate + value: + id: '492273054948263356' + administration_id: 123 + contact_id: '492273054630544812' + contact: + id: '492273054630544812' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:30.580Z' + updated_at: '2026-07-10T12:56:30.580Z' + version: 1783688190 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: + - id: '492273054635787694' + contact_id: '492273054630544812' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:30.585Z' + updated_at: '2026-07-10T12:56:30.585Z' + version: 1783688190 + archived: false + contact_person_id: null + contact_person: null + invoice_id: null + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 1 + state: draft + invoice_date: null + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: null + short_payment_reference: null + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: null + created_at: '2026-07-10T12:56:30.883Z' + updated_at: '2026-07-10T12:56:30.888Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688190 + details: + - id: '492273054951409085' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:30.886Z' + updated_at: '2026-07-10T12:56:30.886Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: null + original_estimate_id: '492273054786782646' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/55d8a8aef1131e89cb217adad4daaf685b6b106d5e2c595d319ea47f280c8576/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/55d8a8aef1131e89cb217adad4daaf685b6b106d5e2c595d319ea47f280c8576/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created_based_on_estimate + link_entity_id: null + link_entity_type: null + data: + original_estimate: 2026-0002 + created_at: '2026-07-10T12:56:30.891Z' + updated_at: '2026-07-10T12:56:30.891Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + CanNotBillAnOpenEstimate: + summary: Can not bill an open estimate + value: + error: Invalid estimate state + symbolic: + id: state + '402': + description: Payment required + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Return402IfLimitIsReached: + summary: Return 402 if limit is reached + value: + error: creating sales invoices is limited + symbolic: + administration: limit_reached + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfTheEstimateDoesNotExist: + summary: Returns 404 if the estimate does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: patch_administration_id_estimates_id_bill_estimate + /{administration_id}/estimates/{id}/change_state{format}: + patch: + summary: Changes the state of an estimate + description: |- + Not every state change is allowed. e.g. open to billed is accepted, draft to open is not. + Note: this only changes the state and does not perform other actions like sending or billing the estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + state: + type: string + description: Can be accepted, rejected, open, late, billed or archived. + required: + - state + examples: + ChangesFromOpenToAccepted: + summary: Changes from open to accepted + value: + state: accepted + responses: + '200': + description: Estimate updated + content: + application/json: + schema: + $ref: '#/components/schemas/estimate_response' + examples: + ChangesFromOpenToAccepted: + summary: Changes from open to accepted + value: + id: '492273053294658921' + administration_id: 123 + contact_id: '492273053135275359' + contact: + id: '492273053135275359' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:29.154Z' + updated_at: '2026-07-10T12:56:29.154Z' + version: 1783688189 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0002 + estimate_sequence_id: '0002' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: accepted + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: '2026-07-10' + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:29.306Z' + updated_at: '2026-07-10T12:56:29.404Z' + public_view_code: '653692' + public_view_code_expires_at: '2026-10-10T12:56:29.338Z' + version: 1783688189 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273053296756074' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:29.308Z' + updated_at: '2026-07-10T12:56:29.368Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/54f6c11ad5839323a177e82e88b36f2b915e9cd9d33b5dd6493995c38371f114/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:29.313Z' + updated_at: '2026-07-10T12:56:29.313Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0002 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:29.378Z' + updated_at: '2026-07-10T12:56:29.378Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_mark_accepted + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:29.408Z' + updated_at: '2026-07-10T12:56:29.408Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400IfTheStateChangeIsInvalid: + summary: Returns 400 if the state change is invalid + value: + error: State isn't an option + symbolic: + state: in + ReturnsAnErrorIfEstimateCannotBeMarkedFromDraftToOpen: + summary: Returns an error if estimate cannot be marked from draft to open + value: + error: State is invalid + symbolic: + state: can_not_change_draft_to_open + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfTheEstimateDoesNotExist: + summary: Returns 404 if the estimate does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: patch_administration_id_estimates_id_change_state + /{administration_id}/estimates/{id}/download_pdf{format}: + get: + summary: Download estimate PDF by id + description: |- + Redirects to the download URL of the estimate as PDF. The link is valid for 30 seconds. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: media + in: query + required: false + schema: + type: string + description: In case you want to hide sender address and logo you can set this to 'stationery'. + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + ReturnsEstimateByGivenIdAsPdf: + summary: Returns estimate by given id as pdf + value: '"This resource has been moved temporarily to http://moneybird-storage:3100/032c14da2562470f7ce00bb1b88e0c43e7e684b6d17bd87e14f53c7b83149a90/10b8529a8c85ac4f59a1693fb52bf4481da33037c4fedf79cf17cba760733c8e/download."' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenEstimateDoesNotExist: + summary: Returns 404 when estimate does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_estimates_id_download_pdf + /{administration_id}/estimates/{id}/send_estimate{format}: + patch: + summary: Sends an estimate + description: |- + You can provide a send method, email address and message. If you don't provide any arguments, the defaults + from the contact and workflow will be used. If you have sent the estimate before, then the settings from + the previous sending are used instead of the defaults. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + estimate_sending: + type: object + unevaluatedProperties: false + properties: + delivery_method: + type: string + enum: + - Email + - Manual + email_address: + type: string + description: Recipient email address. Only used when `delivery_method` is `Email`; defaults to the contact's email address. + email_message: + type: string + description: Message included in the email. Only used when `delivery_method` is `Email`; defaults to the workflow's estimate email text. + sign_online: + type: + - boolean + - string + required: [] + sender: + type: + - boolean + - string + signature_output: + type: string + audit_trail: + type: string + ip_address: + type: string + required: [] + examples: + SendsAnEstimateWithAlternativeInformation: + summary: Sends an estimate with alternative information + value: + estimate_sending: + delivery_method: Email + email_address: alternative@example.com + email_message: Hi, this is an estimate with id {invoice_id}! + SendsViaEmailIfContactHasDeliveryMethodSimplerinvoicing: + summary: Sends via email if contact has delivery method simplerinvoicing + value: {} + SendsAnEstimateByGivenId: + summary: Sends an estimate by given id + value: {} + responses: + '200': + description: Estimate updated + content: + application/json: + schema: + $ref: '#/components/schemas/estimate_response' + examples: + SendsAnEstimateWithAlternativeInformation: + summary: Sends an estimate with alternative information + value: + id: '492273050611352788' + administration_id: 123 + contact_id: '492273050576749778' + contact: + id: '492273050576749778' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:26.714Z' + updated_at: '2026-07-10T12:56:26.714Z' + version: 1783688186 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:26.747Z' + updated_at: '2026-07-10T12:56:26.821Z' + public_view_code: '867186' + public_view_code_expires_at: '2026-10-10T12:56:26.789Z' + version: 1783688186 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273050613449941' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:26.749Z' + updated_at: '2026-07-10T12:56:26.820Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/0484b861668a02a19501ae7b88e148d92fb438af18f6f49e51b6d02896cee03c/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:26.755Z' + updated_at: '2026-07-10T12:56:26.755Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: alternative@example.com + email_message: Hi, this is an estimate with id {invoice_id}! + created_at: '2026-07-10T12:56:26.828Z' + updated_at: '2026-07-10T12:56:26.828Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + SendsViaEmailIfContactHasDeliveryMethodSimplerinvoicing: + summary: Sends via email if contact has delivery method simplerinvoicing + value: + id: '492273050923828450' + administration_id: 123 + contact_id: '492273050886079712' + contact: + id: '492273050886079712' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Simplerinvoicing + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '12345678' + si_identifier_type: NL:KVK + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:27.009Z' + updated_at: '2026-07-10T12:56:27.065Z' + version: 1783688187 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:27.045Z' + updated_at: '2026-07-10T12:56:27.124Z' + public_view_code: '879077' + public_view_code_expires_at: '2026-10-10T12:56:27.093Z' + version: 1783688187 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273050925925603' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:27.047Z' + updated_at: '2026-07-10T12:56:27.123Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/4c879710c52b258a4e5b7ba1626ca2d5b6a93f969e394c2521bf6d31192f09de/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:27.054Z' + updated_at: '2026-07-10T12:56:27.054Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:27.132Z' + updated_at: '2026-07-10T12:56:27.132Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + SendsAnEstimateByGivenId: + summary: Sends an estimate by given id + value: + id: '492273051101037803' + administration_id: 123 + contact_id: '492273051064337641' + contact: + id: '492273051064337641' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:27.179Z' + updated_at: '2026-07-10T12:56:27.179Z' + version: 1783688187 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:27.214Z' + updated_at: '2026-07-10T12:56:27.286Z' + public_view_code: '743928' + public_view_code_expires_at: '2026-10-10T12:56:27.256Z' + version: 1783688187 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273051103134956' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:27.217Z' + updated_at: '2026-07-10T12:56:27.285Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/4b8f9de806e1f1884e8817dadeb8e3e9724643f0c709ce31a95232b66be27085/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:27.222Z' + updated_at: '2026-07-10T12:56:27.222Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:27.294Z' + updated_at: '2026-07-10T12:56:27.294Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenSendingInvalidEstimateWithoutDetails: + summary: Returns error when sending invalid estimate without details + value: + error: details cannot be empty + symbolic: + estimate: details_cannot_be_empty + ReturnsAnErrorIfDeliveryMethodSimplerinvoicingIsGiven: + summary: Returns an error if delivery method simplerinvoicing is given + value: + error: Delivery Method isn't an option + symbolic: + estimate_sending: + delivery_method: in + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfTheEstimateDoesNotExist: + summary: Returns 404 if the estimate does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsErrorWhenSendingEstimateToContactWithoutEmailAddress: + summary: Returns error when sending estimate to contact without email address + value: + error: + email_address: + - can't be blank + details: + email_address: + - error: blank + ReturnsErrorWhenSendingEstimateFromIdentityWithoutEmail: + summary: Returns error when sending estimate from identity without email + value: + error: + delivery_method: + - The sender address must contain an email address + details: + delivery_method: + - error: need_identity_email + operationId: patch_administration_id_estimates_id_send_estimate + /{administration_id}/estimates/{id}{format}: + get: + summary: Get an estimate by id + description: |- + Returns all information about an estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: includes + in: query + required: false + schema: + type: array + items: + type: string + responses: + '200': + description: A estimate + content: + application/json: + schema: + $ref: '#/components/schemas/estimate_response' + examples: + ReturnsEstimateByGivenId: + summary: Returns estimate by given id + value: + id: '492273058894055093' + administration_id: 123 + contact_id: '492273058852112048' + contact: + id: '492273058852112048' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:34.606Z' + updated_at: '2026-07-10T12:56:34.606Z' + version: 1783688194 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273058856306354' + contact_person: + id: null + contact_id: '492273058852112048' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:34.610Z' + updated_at: '2026-07-10T12:56:34.610Z' + version: 1783688194 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:34.646Z' + updated_at: '2026-07-10T12:56:34.706Z' + public_view_code: '678290' + public_view_code_expires_at: '2026-10-10T12:56:34.677Z' + version: 1783688194 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273058896152246' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:34.648Z' + updated_at: '2026-07-10T12:56:34.705Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/8e8973f2fb2d9b8a6cddbbeb1d91e611afdc6bbad7af9fa3317eb408129b07d0/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:34.654Z' + updated_at: '2026-07-10T12:56:34.654Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:34.714Z' + updated_at: '2026-07-10T12:56:34.714Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RespondsWithA404CodeWhenEstimateDoesNotExist: + summary: Responds with a 404 code when estimate does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_estimates_id + patch: + summary: Updates an estimate + description: |- + When updating an estimate, provide only the attributes you want to update. The other + attributes will not be changed. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + estimate: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + contact_person_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact person id. + update_contact: + type: + - boolean + - string + description: When `true`, the contact's address and other details are updated on the estimate from the current contact record. + document_style_id: + $ref: '#/components/schemas/identifier' + description: Default document style is used when value is not provided. Should be a valid document style id. + workflow_id: + $ref: '#/components/schemas/identifier' + description: If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. + reference: + type: string + description: Your own reference for this estimate, e.g. a project code or PO number. Visible to the recipient. + estimate_date: + type: string + description: The date of the estimate. + format: date + estimate_sequence_id: + type: string + description: The ID of the numbering sequence to use for the estimate number. + remove_estimate_sequence_id: + type: + - boolean + - string + description: Set to `true` to remove the assigned numbering sequence, reverting to the administration default. + language: + type: string + description: Can be `bg`, `cs`, `da`, `de`, `el`, `en`, `es`, `fr`, `hr`, `hu`, `it`, `no`, `nl`, `nl-be`, `pl`, `pt`, `ro`, `sv`, `tr` or `uk`. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the estimate are inclusive of tax. + show_tax: + type: + - boolean + - string + description: Whether to show tax amounts on the estimate. + first_due_interval: + type: integer + description: The number of days after the estimate date before the estimate expires. + pre_text: + type: string + description: Introductory text displayed above the details on the estimate document. + post_text: + type: string + description: Closing text displayed below the details on the estimate document. + discount: + $ref: '#/components/schemas/number' + description: Discount percentage, e.g. 10,0%. Should be a number 0 <= *n* <= 100. + original_sales_invoice_id: + $ref: '#/components/schemas/identifier' + description: The ID of the sales invoice this estimate was created from. + details_attributes: + $ref: '#/components/schemas/details_attributes' + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + required: [] + examples: + UpdatesEstimateDetails: + summary: Updates estimate details + value: + estimate: + details_attributes: + '0': + description: Detail description + price: 99 + amount: 1 + tax_rate_id: 492272802314847360 + ledger_account_id: 492272802100937860 + '1': + id: 492273048807802000 + _destroy: true + UpdatesTheDiscount: + summary: Updates the discount + value: + estimate: + reference: Updated Reference + responses: + '200': + description: Estimate updated + content: + application/json: + schema: + $ref: '#/components/schemas/estimate_response' + examples: + UpdatesEstimateDetails: + summary: Updates estimate details + value: + id: '492273048805704812' + administration_id: 123 + contact_id: '492273048762713191' + contact: + id: '492273048762713191' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:24.984Z' + updated_at: '2026-07-10T12:56:24.984Z' + version: 1783688184 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273048767956073' + contact_person: + id: null + contact_id: '492273048762713191' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:24.989Z' + updated_at: '2026-07-10T12:56:24.989Z' + version: 1783688184 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:25.025Z' + updated_at: '2026-07-10T12:56:25.156Z' + public_view_code: '046690' + public_view_code_expires_at: '2026-10-10T12:56:25.057Z' + version: 1783688185 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273048940971121' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: '1' + amount_decimal: '1.0' + description: Detail description + price: '99.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '99.0' + total_price_excl_tax_with_discount_base: '99.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:25.154Z' + updated_at: '2026-07-10T12:56:25.154Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '99.0' + total_price_excl_tax_base: '99.0' + total_price_incl_tax: '119.79' + total_price_incl_tax_base: '119.79' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/cb9d75194e4856b29cf611132539129e88104e9abc3532884839de4c984e31aa/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:25.033Z' + updated_at: '2026-07-10T12:56:25.033Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:25.095Z' + updated_at: '2026-07-10T12:56:25.095Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_updated + link_entity_id: null + link_entity_type: null + data: + total_price_excl_tax: + - '300.0' + - '99.0' + total_price_excl_tax_base: + - '300.0' + - '99.0' + total_price_incl_tax: + - '363.0' + - '119.79' + total_price_incl_tax_base: + - '363.0' + - '119.79' + cached_taxes: + - - tax_rate_id: '492272802314847370' + report_reference: NL/1a + payable: true + debit: 0 + credit: '63.0' + - - tax_rate_id: '492272802314847370' + report_reference: NL/1a + payable: true + debit: 0 + credit: '20.79' + updated_at: + - '2026-07-10T14:56:25.088+02:00' + - '2026-07-10T14:56:25.148+02:00' + created_at: '2026-07-10T12:56:25.157Z' + updated_at: '2026-07-10T12:56:25.157Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '99.0' + taxable_amount_base: '99.0' + tax_amount: '20.79' + tax_amount_base: '20.79' + UpdatesTheDiscount: + summary: Updates the discount + value: + id: '492273049029051513' + administration_id: 123 + contact_id: '492273048987108468' + contact: + id: '492273048987108468' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:25.198Z' + updated_at: '2026-07-10T12:56:25.198Z' + version: 1783688185 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273048991302774' + contact_person: + id: null + contact_id: '492273048987108468' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:25.202Z' + updated_at: '2026-07-10T12:56:25.202Z' + version: 1783688185 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Updated Reference + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:25.238Z' + updated_at: '2026-07-10T12:56:25.342Z' + public_view_code: '237347' + public_view_code_expires_at: '2026-10-10T12:56:25.270Z' + version: 1783688185 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273049031148666' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:25.240Z' + updated_at: '2026-07-10T12:56:25.298Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/684bf6da9a867e4fc147321dfd5c205e5390f157b200a14567be9ff76ec8ae83/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:25.245Z' + updated_at: '2026-07-10T12:56:25.245Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:25.307Z' + updated_at: '2026-07-10T12:56:25.307Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_updated + link_entity_id: null + link_entity_type: null + data: + reference: + - Project X + - Updated Reference + updated_at: + - '2026-07-10T14:56:25.299+02:00' + - '2026-07-10T14:56:25.342+02:00' + created_at: '2026-07-10T12:56:25.345Z' + updated_at: '2026-07-10T12:56:25.345Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400IfTheUpdateIsInvalid: + summary: Returns 400 if the update is invalid + value: + error: Estimate can't be nil + symbolic: + estimate: nils + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RespondsWithA404CodeWhenEstimateDoesNotExist: + summary: Responds with a 404 code when estimate does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422IfTheUpdateIsInvalid: + summary: Returns 422 if the update is invalid + value: + error: + language: + - is not included in the list + details: + language: + - error: inclusion + value: abracadabra + operationId: patch_administration_id_estimates_id + delete: + summary: Deletes an estimate + description: |- + Deletes an estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Estimate deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfTheEstimateDoesNotExist: + summary: Returns 404 if the estimate does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_estimates_id + /{administration_id}/estimates{format}: + get: + summary: List all estimates + description: |- + Returns a paginated list of estimates in the administration. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | --- | --- | --- | --- | + | state | `String` | `all` | `all`, `draft`, `open`, `late`, `accepted`, `rejected`, `billed` or `archived` | + | period | `String` | `this_year` | This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | + | contact_id | `Integer` | | Filters estimates by a single contact | + | workflow_id | `Integer` | | Filters estimates by a single workflow | + + You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:draft|scheduled`. + schema: + type: string + default: period:this_year + examples: + ReturnsAllEstimatesFilteredOnPeriod: + summary: Returns all estimates filtered on period + value: period:this_month + ReturnsAllEstimatesFilteredOnState: + summary: Returns all estimates filtered on state + value: state:open + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of estimates + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/estimate_response' + examples: + ReturnsPaginatedEstimatesOnPage2: + summary: Returns paginated estimates on page 2 + value: + - id: '492273061669635850' + administration_id: 123 + contact_id: '492273061400151804' + contact: + id: '492273061400151804' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:37.036Z' + updated_at: '2026-07-10T12:56:37.036Z' + version: 1783688197 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0003 + estimate_sequence_id: '0003' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:37.293Z' + updated_at: '2026-07-10T12:56:37.373Z' + public_view_code: '505330' + public_view_code_expires_at: '2026-10-10T12:56:37.325Z' + version: 1783688197 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273061671733003' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:37.296Z' + updated_at: '2026-07-10T12:56:37.372Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/191139dc05d92e224cb3c327afee22ab11811024fb41eb56c7c963cf0c41de52/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:37.301Z' + updated_at: '2026-07-10T12:56:37.301Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0003 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:37.381Z' + updated_at: '2026-07-10T12:56:37.381Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + ReturnsAllEstimatesFilteredOnPeriod: + summary: Returns all estimates filtered on period + value: + - id: '492273062349113128' + administration_id: 123 + contact_id: '492273061978965782' + contact: + id: '492273061978965782' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:37.588Z' + updated_at: '2026-07-10T12:56:37.588Z' + version: 1783688197 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0004 + estimate_sequence_id: '0004' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:37.941Z' + updated_at: '2026-07-10T12:56:38.004Z' + public_view_code: '854763' + public_view_code_expires_at: '2026-10-10T12:56:37.975Z' + version: 1783688198 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062352258857' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:37.944Z' + updated_at: '2026-07-10T12:56:38.003Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/a424cdc405faa3d88688675b76967dd3c66dd16d36916246b05ffdda6a6289b4/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:37.950Z' + updated_at: '2026-07-10T12:56:37.950Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0004 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:38.012Z' + updated_at: '2026-07-10T12:56:38.012Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273062235866916' + administration_id: 123 + contact_id: '492273061978965782' + contact: + id: '492273061978965782' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:37.588Z' + updated_at: '2026-07-10T12:56:37.588Z' + version: 1783688197 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0003 + estimate_sequence_id: '0003' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:37.833Z' + updated_at: '2026-07-10T12:56:37.893Z' + public_view_code: '029994' + public_view_code_expires_at: '2026-10-10T12:56:37.865Z' + version: 1783688197 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062237964069' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:37.836Z' + updated_at: '2026-07-10T12:56:37.891Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/9b9fa715c5b682e39f33f7aeed5abc4df2adbc2bba5b107e649c86e0332ca95f/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:37.841Z' + updated_at: '2026-07-10T12:56:37.841Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0003 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:37.901Z' + updated_at: '2026-07-10T12:56:37.901Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273062129960736' + administration_id: 123 + contact_id: '492273061978965782' + contact: + id: '492273061978965782' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:37.588Z' + updated_at: '2026-07-10T12:56:37.588Z' + version: 1783688197 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0002 + estimate_sequence_id: '0002' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:37.732Z' + updated_at: '2026-07-10T12:56:37.790Z' + public_view_code: '329707' + public_view_code_expires_at: '2026-10-10T12:56:37.762Z' + version: 1783688197 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062132057889' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:37.734Z' + updated_at: '2026-07-10T12:56:37.788Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/743fe2cfc2145280b7da41e871da5aac75b8b7578af6804b15ec3b8bad14b999/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:37.739Z' + updated_at: '2026-07-10T12:56:37.739Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0002 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:37.798Z' + updated_at: '2026-07-10T12:56:37.798Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273062019860251' + administration_id: 123 + contact_id: '492273061978965782' + contact: + id: '492273061978965782' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:37.588Z' + updated_at: '2026-07-10T12:56:37.588Z' + version: 1783688197 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273061983160088' + contact_person: + id: null + contact_id: '492273061978965782' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:37.592Z' + updated_at: '2026-07-10T12:56:37.592Z' + version: 1783688197 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:37.627Z' + updated_at: '2026-07-10T12:56:37.689Z' + public_view_code: '001196' + public_view_code_expires_at: '2026-10-10T12:56:37.660Z' + version: 1783688197 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062021957404' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:37.629Z' + updated_at: '2026-07-10T12:56:37.688Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/1d23d1a5d54cbc410057a6f7893e729d231562ff6dc1132b9421c684ef6f361d/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:37.634Z' + updated_at: '2026-07-10T12:56:37.634Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:37.697Z' + updated_at: '2026-07-10T12:56:37.697Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + ReturnsAllEstimatesFilteredOnState: + summary: Returns all estimates filtered on state + value: + - id: '492273062975113026' + administration_id: 123 + contact_id: '492273062550439728' + contact: + id: '492273062550439728' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:38.133Z' + updated_at: '2026-07-10T12:56:38.133Z' + version: 1783688198 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0004 + estimate_sequence_id: '0004' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:38.538Z' + updated_at: '2026-07-10T12:56:38.601Z' + public_view_code: '263025' + public_view_code_expires_at: '2026-10-10T12:56:38.570Z' + version: 1783688198 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062977210179' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:38.540Z' + updated_at: '2026-07-10T12:56:38.600Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/7a6c442f57279666682b1862c916c79066cc742cbea9992088814a7cb1278cf5/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:38.546Z' + updated_at: '2026-07-10T12:56:38.546Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0004 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:38.609Z' + updated_at: '2026-07-10T12:56:38.609Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273062855575358' + administration_id: 123 + contact_id: '492273062550439728' + contact: + id: '492273062550439728' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:38.133Z' + updated_at: '2026-07-10T12:56:38.133Z' + version: 1783688198 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0003 + estimate_sequence_id: '0003' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:38.424Z' + updated_at: '2026-07-10T12:56:38.490Z' + public_view_code: '909889' + public_view_code_expires_at: '2026-10-10T12:56:38.459Z' + version: 1783688198 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062857672511' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:38.426Z' + updated_at: '2026-07-10T12:56:38.489Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/31dfd417f47208f6460fd6a8a9b3072a4f6245b3b2ca0679a889fbb5ace13983/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:38.431Z' + updated_at: '2026-07-10T12:56:38.431Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0003 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:38.499Z' + updated_at: '2026-07-10T12:56:38.499Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273062736037690' + administration_id: 123 + contact_id: '492273062550439728' + contact: + id: '492273062550439728' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:38.133Z' + updated_at: '2026-07-10T12:56:38.133Z' + version: 1783688198 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0002 + estimate_sequence_id: '0002' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:38.310Z' + updated_at: '2026-07-10T12:56:38.376Z' + public_view_code: '800607' + public_view_code_expires_at: '2026-10-10T12:56:38.343Z' + version: 1783688198 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062738134843' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:38.312Z' + updated_at: '2026-07-10T12:56:38.374Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/97b16c0f62254bbf8193411bb41b5d1f74e1ccedd0d89d1464dbbcf7456b9952/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:38.318Z' + updated_at: '2026-07-10T12:56:38.318Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0002 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:38.384Z' + updated_at: '2026-07-10T12:56:38.384Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273062593431349' + administration_id: 123 + contact_id: '492273062550439728' + contact: + id: '492273062550439728' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:38.133Z' + updated_at: '2026-07-10T12:56:38.133Z' + version: 1783688198 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273062554634034' + contact_person: + id: null + contact_id: '492273062550439728' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:38.138Z' + updated_at: '2026-07-10T12:56:38.138Z' + version: 1783688198 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:38.174Z' + updated_at: '2026-07-10T12:56:38.260Z' + public_view_code: '004612' + public_view_code_expires_at: '2026-10-10T12:56:38.205Z' + version: 1783688198 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273062595528502' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:38.176Z' + updated_at: '2026-07-10T12:56:38.258Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/73aa718d459d352d81cd1c3bf17b6d447947c6d7ad4db036e6379105345d9c55/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:38.181Z' + updated_at: '2026-07-10T12:56:38.181Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:38.270Z' + updated_at: '2026-07-10T12:56:38.270Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + ReturnsPaginatedEstimatesOnPage1: + summary: Returns paginated estimates on page 1 + value: + - id: '492273064101283702' + administration_id: 123 + contact_id: '492273063714359140' + contact: + id: '492273063714359140' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:39.243Z' + updated_at: '2026-07-10T12:56:39.243Z' + version: 1783688199 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0004 + estimate_sequence_id: '0004' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:39.612Z' + updated_at: '2026-07-10T12:56:39.670Z' + public_view_code: '705506' + public_view_code_expires_at: '2026-10-10T12:56:39.642Z' + version: 1783688199 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273064103380855' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:39.614Z' + updated_at: '2026-07-10T12:56:39.669Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/05fb27856672955e064da95da9d45902daedec3b6afd4474e386ca5e95ac68c9/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:39.619Z' + updated_at: '2026-07-10T12:56:39.619Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0004 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:39.678Z' + updated_at: '2026-07-10T12:56:39.678Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + ReturnsAllEstimatesOfAnAdministration: + summary: Returns all estimates of an administration + value: + - id: '492273064665417616' + administration_id: 123 + contact_id: '492273064283735934' + contact: + id: '492273064283735934' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:39.786Z' + updated_at: '2026-07-10T12:56:39.786Z' + version: 1783688199 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0004 + estimate_sequence_id: '0004' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:40.150Z' + updated_at: '2026-07-10T12:56:40.240Z' + public_view_code: '675383' + public_view_code_expires_at: '2026-10-10T12:56:40.208Z' + version: 1783688200 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273064667514769' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:40.152Z' + updated_at: '2026-07-10T12:56:40.238Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/ec9528938360511149acb8897311d708fe390d6c9d1ff2b72d927402a2c8c0e1/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:40.157Z' + updated_at: '2026-07-10T12:56:40.157Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0004 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:40.248Z' + updated_at: '2026-07-10T12:56:40.248Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273064553219980' + administration_id: 123 + contact_id: '492273064283735934' + contact: + id: '492273064283735934' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:39.786Z' + updated_at: '2026-07-10T12:56:39.786Z' + version: 1783688199 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0003 + estimate_sequence_id: '0003' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:40.043Z' + updated_at: '2026-07-10T12:56:40.105Z' + public_view_code: '077548' + public_view_code_expires_at: '2026-10-10T12:56:40.074Z' + version: 1783688200 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273064555317133' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:40.045Z' + updated_at: '2026-07-10T12:56:40.103Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/51bfa19ffae96564015f73148c8b88e6d035df4a6f7d7fdb9a6f1122233070a8/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:40.050Z' + updated_at: '2026-07-10T12:56:40.050Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0003 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:40.113Z' + updated_at: '2026-07-10T12:56:40.113Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273064443119496' + administration_id: 123 + contact_id: '492273064283735934' + contact: + id: '492273064283735934' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:39.786Z' + updated_at: '2026-07-10T12:56:39.786Z' + version: 1783688199 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + estimate_id: 2026-0002 + estimate_sequence_id: '0002' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:39.938Z' + updated_at: '2026-07-10T12:56:40.000Z' + public_view_code: '275584' + public_view_code_expires_at: '2026-10-10T12:56:39.971Z' + version: 1783688200 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273064445216649' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:39.940Z' + updated_at: '2026-07-10T12:56:39.999Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/f7478bc2415f2542ea9a76794c0df26df7463a1331cadc20d9439244abdaa45a/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:39.946Z' + updated_at: '2026-07-10T12:56:39.946Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + Hierbij ontvangt u van ons een prijsopgave 2026-0002 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:40.008Z' + updated_at: '2026-07-10T12:56:40.008Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + - id: '492273064327776131' + administration_id: 123 + contact_id: '492273064283735934' + contact: + id: '492273064283735934' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:39.786Z' + updated_at: '2026-07-10T12:56:39.786Z' + version: 1783688199 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492273064288978816' + contact_person: + id: null + contact_id: '492273064283735934' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:39.791Z' + updated_at: '2026-07-10T12:56:39.791Z' + version: 1783688199 + estimate_id: 2026-0001 + estimate_sequence_id: '0001' + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + estimate_date: '2026-07-10' + due_date: '2026-07-24' + reference: Project X + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: '2026-07-10' + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:39.828Z' + updated_at: '2026-07-10T12:56:39.892Z' + public_view_code: '904068' + public_view_code_expires_at: '2026-10-10T12:56:39.860Z' + version: 1783688199 + pre_text: Hello, here is your quote + post_text: Please sign it + details: + - id: '492273064329873284' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:56:39.830Z' + updated_at: '2026-07-10T12:56:39.890Z' + is_optional: false + is_selected: true + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/af8b5fb1b317ffff837de011fb27cc9d0ed4dfcf21c58cfe39b3cc32d4e0b779/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:39.835Z' + updated_at: '2026-07-10T12:56:39.835Z' + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + Hierbij ontvangt u van ons een prijsopgave 2026-0001 voor onze + diensten. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:56:39.900Z' + updated_at: '2026-07-10T12:56:39.900Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyEstimatesAreRequested: + summary: Returns an error when too many estimates are requested + value: + error: per_page does not have a valid value + operationId: get_administration_id_estimates + post: + summary: Creates a new estimate + description: |- + Creates a new estimate. + + ### Required scope(s) + `estimates` + tags: + - Estimates + security: + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + estimate: + type: object + unevaluatedProperties: false + properties: + contact_id: + type: + - integer + - string + description: Should be a valid contact id. + contact_person_id: + type: + - integer + - string + description: Should be a valid contact person id. + document_style_id: + type: + - integer + - string + description: Default document style is used when value is not provided. Should be a valid document style id. + workflow_id: + type: + - integer + - string + description: If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. + reference: + type: string + description: Your own reference for this estimate, e.g. a project code or PO number. Visible to the recipient. + estimate_date: + type: string + description: The date of the estimate. Defaults to the current date. + format: date + estimate_sequence_id: + type: string + description: The ID of the numbering sequence to use for the estimate number. If not provided, the administration default is used. + remove_estimate_sequence_id: + type: + - boolean + - string + description: Set to `true` to remove the assigned numbering sequence, reverting to the administration default. + language: + type: string + description: Can be `bg`, `cs`, `da`, `de`, `el`, `en`, `es`, `fr`, `hr`, `hu`, `it`, `no`, `nl`, `nl-be`, `pl`, `pt`, `ro`, `sv`, `tr` or `uk`. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. Defaults to the workflow's currency. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the estimate are inclusive of tax. Defaults to the workflow's setting. + show_tax: + type: + - boolean + - string + description: Whether to show tax amounts on the estimate. Useful for non-VAT registered businesses or tax-exempt clients. Defaults to the workflow's setting. + first_due_interval: + type: + - integer + - string + description: The number of days after the estimate date before the estimate expires. Defaults to the first workflow step's due interval. + pre_text: + type: string + description: Introductory text displayed above the details on the estimate document. Defaults to the workflow's pre-text. + post_text: + type: string + description: Closing text displayed below the details on the estimate document. Defaults to the workflow's post-text. + discount: + $ref: '#/components/schemas/number' + description: Discount percentage, e.g. 10,0%. Should be a number 0 <= *n* <= 100. + original_sales_invoice_id: + $ref: '#/components/schemas/identifier' + description: The ID of the sales invoice this estimate was created from (e.g. for credit notes or revised estimates). + details_attributes: + $ref: '#/components/schemas/details_attributes' + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + required: [] + examples: + CreatesANewEstimate: + summary: Creates a new estimate + value: + estimate: + contact_id: 492273059036661440 + reference: Estimate Reference + responses: + '201': + description: Estimate created + content: + application/json: + schema: + $ref: '#/components/schemas/estimate_response' + examples: + CreatesANewEstimate: + summary: Creates a new estimate + value: + id: '492273059196044997' + administration_id: 123 + contact_id: '492273059036661435' + contact: + id: '492273059036661435' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:56:34.782Z' + updated_at: '2026-07-10T12:56:34.782Z' + version: 1783688194 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: + - id: '492273059040855741' + contact_id: '492273059036661435' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:56:34.786Z' + updated_at: '2026-07-10T12:56:34.786Z' + version: 1783688194 + archived: false + contact_person_id: null + contact_person: null + estimate_id: null + estimate_sequence_id: null + workflow_id: '492272802992227477' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 2 + state: draft + estimate_date: null + due_date: '2026-07-24' + reference: Estimate Reference + language: nl + currency: EUR + exchange_rate: '1.0' + discount: '0.0' + original_estimate_id: null + show_tax: true + sign_online: true + sent_at: null + accepted_at: null + rejected_at: null + archived_at: null + created_at: '2026-07-10T12:56:34.934Z' + updated_at: '2026-07-10T12:56:34.934Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688194 + pre_text: |- + Geachte {recipient.name}, + + Hierbij ontvangt u van ons de prijsopgave {document.estimate_id} voor de onderstaande diensten. + post_text: |- + We hopen u hiermee voldoende geïnformeerd te hebben. + + Met vriendelijke groet, + + {company.company_name} + details: [] + prices_are_incl_tax: false + total_price_excl_tax: '0.0' + total_price_excl_tax_base: '0.0' + total_price_incl_tax: '0.0' + total_price_incl_tax_base: '0.0' + total_discount: 0 + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/d1918892d573f5bb2819d90a285817cd9d3319dfbb81a5fb370ca073f08aa7bb/estimate + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: estimate_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:56:34.938Z' + updated_at: '2026-07-10T12:56:34.938Z' + tax_totals: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400IfTheCreationIsInvalid: + summary: Returns 400 if the creation is invalid + value: + error: Estimate can't be nil + symbolic: + estimate: nils + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422IfTheCreationIsInvalid: + summary: Returns 422 if the creation is invalid + value: + error: + contact_id: + - can't be blank + language: + - is not included in the list + details: + contact_id: + - error: blank + language: + - error: inclusion + value: abracadabra + operationId: post_administration_id_estimates + /{administration_id}/external_sales_invoices/attachment{format}: + post: + summary: Create external sales invoice from attachment + description: |- + Creates an external sales invoice from an attachment. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + $ref: '#/components/responses/status_code' + '400': + $ref: '#/components/responses/400_bad_request' + operationId: post_administration_id_external_sales_invoices_attachment + /{administration_id}/external_sales_invoices/synchronization{format}: + get: + summary: List all ids and versions + description: |- + Returns all external sales invoices in the administration. The list contains the id and the version of the external sales invoice. + Check if the version of an external sales invoice is newer than the version you have stored locally, use the `POST` + variant for fetching external sales invoices with the given ids. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | --- | --- | --- | --- | + | state | `String` | `all` | `all`, `new`, `open`, `late`, or `paid` | + | period | `String` | `this_year` | This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | + | contact_id | `Integer` | | Select invoices belonging to a certain contact | + + You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:new|open`. + schema: + type: string + default: period:this_year + examples: + ReturnsUniqueIdsEvenWhenSalesInvoicesHaveMultipleAttachments: + summary: Returns unique ids even when sales invoices have multiple attachments + value: state:open + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + ReturnsUniqueIdsEvenWhenSalesInvoicesHaveMultipleAttachments: + summary: Returns unique ids even when sales invoices have multiple attachments + value: + - id: '492272874890987251' + version: 1783688019 + - id: '492272874914055927' + version: 1783688019 + - id: '492272874933978875' + version: 1783688019 + RetrievesTheIdsForSynchronization: + summary: Retrieves the ids for synchronization + value: + - id: '492272875003184898' + version: 1783688019 + - id: '492272875023107846' + version: 1783688019 + - id: '492272875043030794' + version: 1783688019 + - id: '492272875051419404' + version: 1783688019 + RetrievesTheIdsForSynchronizationWithAFilter: + summary: Retrieves the ids for synchronization with a filter + value: + - id: '492272875094411023' + version: 1783688019 + - id: '492272875115382547' + version: 1783688019 + - id: '492272875135305495' + version: 1783688019 + operationId: get_administration_id_external_sales_invoices_synchronization + post: + summary: Fetch external sales invoices with given ids + description: |- + Given a list of external sales invoice ids, returns the external sales invoice information belonging to the external sales invoice. + Returns a maximum of 100 external sales invoices, even if more ids are provided. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesSalesInvoicesGivenByIds: + summary: Retrieves sales invoices given by ids + value: + ids: + - 492272877452658600 + - 492272877469435840 + responses: + '200': + description: A list of external sales invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/external_sales_invoice_response' + examples: + RetrievesSalesInvoicesGivenByIds: + summary: Retrieves sales invoices given by ids + value: + - id: '492272877469435843' + administration_id: 123 + contact_id: '492272877461047234' + contact: + id: '492272877461047234' + administration_id: 123 + company_name: Relation 3 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-3 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.619Z' + updated_at: '2026-07-10T12:53:41.619Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000003/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 3 + entry_number: 103 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.626Z' + updated_at: '2026-07-10T12:53:41.629Z' + version: 1783688021 + details: + - id: '492272877470484420' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.628Z' + updated_at: '2026-07-10T12:53:41.628Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + - id: '492272877452658623' + administration_id: 123 + contact_id: '492272877444270014' + contact: + id: '492272877444270014' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.602Z' + updated_at: '2026-07-10T12:53:41.602Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 2 + entry_number: 102 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.610Z' + updated_at: '2026-07-10T12:53:41.613Z' + version: 1783688021 + details: + - id: '492272877453707200' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.611Z' + updated_at: '2026-07-10T12:53:41.611Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + '400': + $ref: '#/components/responses/400_bad_request' + operationId: post_administration_id_external_sales_invoices_synchronization + /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/attachments/{id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: external_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: | + + + Use the Location header to download the attachment + + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheAttachmentDoesNotExist: + summary: Returns 404 when the attachment does not exist + value: + error: 'Record not found for model name: Attachment' + operationId: get_administration_id_external_sales_invoices_external_sales_invoice_id_attachments_id_download + /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/attachments/{id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: external_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_external_sales_invoices_external_sales_invoice_id_attachments_id + /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the external sales invoice + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: external_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_external_sales_invoices_external_sales_invoice_id_notes_id + /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the external sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: external_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + type: + - integer + - string + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492272877693831100 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492272877713754079' + administration_id: 123 + entity_id: '492272877685442523' + entity_type: ExternalSalesInvoice + user_id: '492272801297728613' + assignee_id: '492272877693831133' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:53:41.860Z' + updated_at: '2026-07-10T12:53:41.860Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenInvoiceDoesNotExist: + summary: Returns 400 when invoice does not exist + value: + error: Entity is invalid; User has no permissions to notes for ExternalSalesInvoice + symbolic: + entity: not_found + user: insufficient_permissions + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNoteParamsAreInvalid: + summary: Returns 422 when note params are invalid + value: + error: + note: + - can't be blank + todo_type: + - can't be blank + details: + note: + - error: blank + todo_type: + - error: blank + operationId: post_administration_id_external_sales_invoices_external_sales_invoice_id_notes + /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/payments/{id}{format}: + delete: + summary: Delete a payment + description: |- + Deletes a payment from an external sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: external_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Payment deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenPaymentDoesNotExist: + summary: Returns 404 when payment does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_external_sales_invoices_external_sales_invoice_id_payments_id + /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/payments{format}: + post: + summary: Create a payment + description: |- + Registers a payment for a external sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: external_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + description: The date on which the payment was made. + price: + $ref: '#/components/schemas/number' + description: The amount paid in the document's currency. Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. + transaction_identifier: + type: string + description: An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. + manual_payment_action: + type: string + description: Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + description: The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). + required: + - payment_date + - price + required: [] + examples: + CreateAPayment: + summary: Create a payment + value: + payment: + payment_date: '2026-07-10T12:53:42.493Z' + price: '121.0' + responses: + '201': + description: Payment created + content: + application/json: + schema: + $ref: '#/components/schemas/payment_response' + examples: + CreateAPayment: + summary: Create a payment + value: + id: '492272878393230365' + administration_id: 123 + invoice_type: ExternalSalesInvoice + invoice_id: '492272878370161691' + financial_account_id: null + user_id: '492272801297728613' + payment_transaction_id: null + transaction_identifier: null + price: '121.0' + price_base: '121.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: null + ledger_account_id: '492272802141832323' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:53:42.507Z' + updated_at: '2026-07-10T12:53:42.507Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + invoice_id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenPaymentParamsAreInvalid: + summary: Returns 422 when payment params are invalid + value: + error: + payment_date: + - can't be blank + - is not a valid date + price: + - can't be blank + - is not a number + details: + payment_date: + - error: blank + - error: is not a valid date + price: + - error: blank + - error: not_a_number + value: null + operationId: post_administration_id_external_sales_invoices_external_sales_invoice_id_payments + /{administration_id}/external_sales_invoices/{id}/attachment{format}: + post: + summary: Add attachment to external sales invoice + description: |- + Add an attachment to an external sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + $ref: '#/components/responses/status_code' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: post_administration_id_external_sales_invoices_id_attachment + /{administration_id}/external_sales_invoices/{id}/mark_as_dubious{format}: + patch: + summary: Mark as dubious + description: |- + This endpoint marks an external sales invoice as dubious. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + dubious_date: + type: string + format: date + required: [] + examples: + MarksTheExternalSalesInvoiceAsDubious: + summary: Marks the external sales invoice as dubious + value: {} + responses: + '200': + description: External sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/external_sales_invoice_response' + examples: + MarksTheExternalSalesInvoiceAsDubious: + summary: Marks the external sales invoice as dubious + value: + id: '492272879857042605' + administration_id: 123 + contact_id: '492272879844459692' + contact: + id: '492272879844459692' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:43.891Z' + updated_at: '2026-07-10T12:53:43.891Z' + version: 1783688023 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-04-11' + state: open + due_date: null + reference: Invoice 1 + entry_number: 101 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:43.903Z' + updated_at: '2026-07-10T12:53:44.156Z' + version: 1783688024 + details: + - id: '492272879859139758' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:43.905Z' + updated_at: '2026-07-10T12:53:43.905Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: '2026-07-10' + marked_uncollectible_on: null + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: external_sales_invoice_marked_as_dubious + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:44.159Z' + updated_at: '2026-07-10T12:53:44.159Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenInvoiceCannotBeMarkedAsDubious: + summary: Returns 400 when invoice cannot be marked as dubious + value: + error: Invoice should be open, late or due, not a credit invoice and cannot have an invoice date in the future + symbolic: + invoice: not_open + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: 'Record not found for model name: External invoice' + operationId: patch_administration_id_external_sales_invoices_id_mark_as_dubious + /{administration_id}/external_sales_invoices/{id}/mark_as_uncollectible{format}: + patch: + summary: Mark as uncollectible + description: |- + This endpoint marks an external sales invoice as uncollectible. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + uncollectible_date: + type: string + format: date + book_method: + type: string + description: Can be `revenue`. + required: [] + examples: + MarksTheSalesInvoiceAsUncollectibleUsingTheUncollectibleRevenue: + summary: Marks the sales invoice as uncollectible using the uncollectible revenue + value: {} + responses: + '200': + description: External sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/external_sales_invoice_response' + examples: + MarksTheSalesInvoiceAsUncollectibleUsingTheUncollectibleRevenue: + summary: Marks the sales invoice as uncollectible using the uncollectible revenue + value: + id: '492272879280325769' + administration_id: 123 + contact_id: '492272879268791432' + contact: + id: '492272879268791432' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:43.342Z' + updated_at: '2026-07-10T12:53:43.342Z' + version: 1783688023 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-04-11' + state: uncollectible + due_date: null + reference: Invoice 1 + entry_number: 101 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:43.353Z' + updated_at: '2026-07-10T12:53:43.767Z' + version: 1783688023 + details: + - id: '492272879281374346' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:43.355Z' + updated_at: '2026-07-10T12:53:43.766Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: '2026-07-10' + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: external_sales_invoice_state_changed_to_uncollectible + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:43.753Z' + updated_at: '2026-07-10T12:53:43.753Z' + - administration_id: 123 + user_id: '492272801297728613' + action: external_sales_invoice_marked_as_uncollectible + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:43.772Z' + updated_at: '2026-07-10T12:53:43.772Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenInvoiceCannotBeMarkedAsUncollectible: + summary: Returns 400 when invoice cannot be marked as uncollectible + value: + error: Sales invoice should be open, late or due, not a credit invoice and cannot have a invoice date in the future + symbolic: + invoice: not_open + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: 'Record not found for model name: External invoice' + operationId: patch_administration_id_external_sales_invoices_id_mark_as_uncollectible + /{administration_id}/external_sales_invoices/{id}{format}: + get: + summary: Get an external sales invoice by id + description: |- + Returns an external sales invoice in the administration. + + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: An external sales invoice + content: + application/json: + schema: + $ref: '#/components/schemas/external_sales_invoice_response' + examples: + ReturnsInvoiceByGivenId: + summary: Returns invoice by given id + value: + id: '492272878102774795' + administration_id: 123 + contact_id: '492272878095434762' + contact: + id: '492272878095434762' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:42.223Z' + updated_at: '2026-07-10T12:53:42.223Z' + version: 1783688022 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 1 + entry_number: 101 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:42.231Z' + updated_at: '2026-07-10T12:53:42.234Z' + version: 1783688022 + details: + - id: '492272878104871948' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:42.232Z' + updated_at: '2026-07-10T12:53:42.232Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: 'Record not found for model name: External invoice' + operationId: get_administration_id_external_sales_invoices_id + patch: + summary: Update an external sales invoice + description: |- + When updating an external sales invoice, provide only the attributes you want to update. The other attributes will not be changed. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + external_sales_invoice: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reference: + type: string + description: The invoice number or reference from the external system that created this invoice, e.g. a webshop order ID. + date: + type: string + description: The date of the invoice. + format: date + due_date: + type: string + description: The date by which the invoice should be paid. + format: date + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the invoice are inclusive of tax. + source: + type: string + description: The name of the external system that created this invoice. + source_url: + type: string + description: A URL linking back to the invoice in the external system. + details_attributes: + $ref: '#/components/schemas/details_attributes' + required: [] + required: [] + examples: + AddingAndRemovingAnInvoiceDetail: + summary: Adding and removing an invoice detail + value: + external_sales_invoice: + details_attributes: + - description: Sofa + price: 199.99 + - id: 492272877756745700 + _destroy: true + UpdatingTheInvoiceReference: + summary: Updating the invoice reference + value: + external_sales_invoice: + reference: '30053' + responses: + '200': + description: External sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/external_sales_invoice_response' + examples: + AddingAndRemovingAnInvoiceDetail: + summary: Adding and removing an invoice detail + value: + id: '492272877754648547' + administration_id: 123 + contact_id: '492272877746259938' + contact: + id: '492272877746259938' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.890Z' + updated_at: '2026-07-10T12:53:41.890Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 1 + entry_number: 1 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.898Z' + updated_at: '2026-07-10T12:53:41.945Z' + version: 1783688021 + details: + - id: '492272877801834470' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Sofa + price: '199.99' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '199.99' + total_price_excl_tax_with_discount_base: '199.99' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.943Z' + updated_at: '2026-07-10T12:53:41.943Z' + payments: [] + total_paid: '0.0' + total_unpaid: '241.99' + total_unpaid_base: '241.99' + prices_are_incl_tax: false + total_price_excl_tax: '199.99' + total_price_excl_tax_base: '199.99' + total_price_incl_tax: '241.99' + total_price_incl_tax_base: '241.99' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: external_sales_invoice_updated + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:41.947Z' + updated_at: '2026-07-10T12:53:41.947Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '199.99' + taxable_amount_base: '199.99' + tax_amount: '42.0' + tax_amount_base: '42.0' + UpdatingTheInvoiceReference: + summary: Updating the invoice reference + value: + id: '492272877945489400' + administration_id: 123 + contact_id: '492272877937100791' + contact: + id: '492272877937100791' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:42.072Z' + updated_at: '2026-07-10T12:53:42.072Z' + version: 1783688022 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: '30053' + entry_number: 1 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:42.080Z' + updated_at: '2026-07-10T12:53:42.113Z' + version: 1783688022 + details: + - id: '492272877947586553' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:42.082Z' + updated_at: '2026-07-10T12:53:42.112Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: external_sales_invoice_updated + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:42.115Z' + updated_at: '2026-07-10T12:53:42.115Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenUpdateParamsAreInvalid: + summary: Returns 422 when update params are invalid + value: + error: + reference: + - can't be blank + details: + reference: + - error: blank + operationId: patch_administration_id_external_sales_invoices_id + delete: + summary: Delete an external sales invoice + description: |- + Deletes an external sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: External sales invoice deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_external_sales_invoices_id + /{administration_id}/external_sales_invoices{format}: + get: + summary: List all external invoices + description: |- + Returns a paginated list of external sales invoices in the administration. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | --- | --- | --- | --- | + | state | `String` | `all` | `all`, `new`, `open`, `late`, or `paid` | + | period | `String` | `this_year` | This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | + | contact_id | `Integer` | | Select invoices belonging to a certain contact | + + You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:new|open`. + schema: + type: string + default: period:this_year + examples: + ReturnsAllInvoicesFilteredOnState: + summary: Returns all invoices filtered on state + value: state:open + ReturnsAllInvoicesFilteredOnPeriod: + summary: Returns all invoices filtered on period + value: period:this_month + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of external sales invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/external_sales_invoice_response' + examples: + ReturnsAllInvoicesFilteredOnState: + summary: Returns all invoices filtered on state + value: + - id: '492272876388353873' + administration_id: 123 + contact_id: '492272876379965264' + contact: + id: '492272876379965264' + administration_id: 123 + company_name: Relation 3 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-3 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:40.587Z' + updated_at: '2026-07-10T12:53:40.587Z' + version: 1783688020 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000003/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 3 + entry_number: 103 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:40.595Z' + updated_at: '2026-07-10T12:53:40.598Z' + version: 1783688020 + details: + - id: '492272876390451026' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:40.597Z' + updated_at: '2026-07-10T12:53:40.597Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + - id: '492272876369479501' + administration_id: 123 + contact_id: '492272876361090892' + contact: + id: '492272876361090892' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:40.569Z' + updated_at: '2026-07-10T12:53:40.569Z' + version: 1783688020 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 2 + entry_number: 102 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:40.577Z' + updated_at: '2026-07-10T12:53:40.581Z' + version: 1783688020 + details: + - id: '492272876371576654' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:40.579Z' + updated_at: '2026-07-10T12:53:40.579Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + - id: '492272876350605129' + administration_id: 123 + contact_id: '492272876341167944' + contact: + id: '492272876341167944' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:40.550Z' + updated_at: '2026-07-10T12:53:40.550Z' + version: 1783688020 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 1 + entry_number: 101 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:40.559Z' + updated_at: '2026-07-10T12:53:40.563Z' + version: 1783688020 + details: + - id: '492272876352702282' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:40.561Z' + updated_at: '2026-07-10T12:53:40.561Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + ReturnsPaginatedExternalSalesInvoicesOnPage2: + summary: Returns paginated external sales invoices on page 2 + value: + - id: '492272876603311979' + administration_id: 123 + contact_id: '492272876594923370' + contact: + id: '492272876594923370' + administration_id: 123 + company_name: Relation 3 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-3 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:40.792Z' + updated_at: '2026-07-10T12:53:40.792Z' + version: 1783688020 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000003/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 3 + entry_number: 103 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:40.800Z' + updated_at: '2026-07-10T12:53:40.803Z' + version: 1783688020 + details: + - id: '492272876604360556' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:40.802Z' + updated_at: '2026-07-10T12:53:40.802Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + ReturnsPaginatedExternalSalesInvoicesOnPage1: + summary: Returns paginated external sales invoices on page 1 + value: + - id: '492272876723898234' + administration_id: 123 + contact_id: null + contact: null + date: '2026-07-10' + state: new + due_date: null + reference: Invoice 4 + entry_number: 104 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:40.916Z' + updated_at: '2026-07-10T12:53:40.916Z' + version: 1783688020 + details: [] + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: [] + ReturnsAllInvoicesFilteredOnPeriod: + summary: Returns all invoices filtered on period + value: + - id: '492272876908447636' + administration_id: 123 + contact_id: null + contact: null + date: '2026-07-10' + state: new + due_date: null + reference: Invoice 4 + entry_number: 104 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.091Z' + updated_at: '2026-07-10T12:53:41.091Z' + version: 1783688021 + details: [] + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: [] + - id: '492272876901107602' + administration_id: 123 + contact_id: '492272876892718993' + contact: + id: '492272876892718993' + administration_id: 123 + company_name: Relation 3 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-3 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.076Z' + updated_at: '2026-07-10T12:53:41.076Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000003/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 3 + entry_number: 103 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.084Z' + updated_at: '2026-07-10T12:53:41.087Z' + version: 1783688021 + details: + - id: '492272876902156179' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.086Z' + updated_at: '2026-07-10T12:53:41.086Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + - id: '492272876883281806' + administration_id: 123 + contact_id: '492272876874893197' + contact: + id: '492272876874893197' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.059Z' + updated_at: '2026-07-10T12:53:41.059Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 2 + entry_number: 102 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.067Z' + updated_at: '2026-07-10T12:53:41.070Z' + version: 1783688021 + details: + - id: '492272876884330383' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.069Z' + updated_at: '2026-07-10T12:53:41.069Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + - id: '492272876865456010' + administration_id: 123 + contact_id: '492272876856018825' + contact: + id: '492272876856018825' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.041Z' + updated_at: '2026-07-10T12:53:41.041Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 1 + entry_number: 101 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.050Z' + updated_at: '2026-07-10T12:53:41.053Z' + version: 1783688021 + details: + - id: '492272876866504587' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.052Z' + updated_at: '2026-07-10T12:53:41.052Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + ReturnsAllExternalSalesInvoicesOfAnAdministration: + summary: Returns all external sales invoices of an administration + value: + - id: '492272877046859681' + administration_id: 123 + contact_id: null + contact: null + date: '2026-07-10' + state: new + due_date: null + reference: Invoice 4 + entry_number: 104 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.224Z' + updated_at: '2026-07-10T12:53:41.224Z' + version: 1783688021 + details: [] + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: [] + - id: '492272877039519647' + administration_id: 123 + contact_id: '492272877031131038' + contact: + id: '492272877031131038' + administration_id: 123 + company_name: Relation 3 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-3 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.208Z' + updated_at: '2026-07-10T12:53:41.208Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000003/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 3 + entry_number: 103 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.216Z' + updated_at: '2026-07-10T12:53:41.219Z' + version: 1783688021 + details: + - id: '492272877040568224' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.217Z' + updated_at: '2026-07-10T12:53:41.217Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + - id: '492272877020645275' + administration_id: 123 + contact_id: '492272877012256666' + contact: + id: '492272877012256666' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.190Z' + updated_at: '2026-07-10T12:53:41.190Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 2 + entry_number: 102 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.199Z' + updated_at: '2026-07-10T12:53:41.202Z' + version: 1783688021 + details: + - id: '492272877022742428' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.200Z' + updated_at: '2026-07-10T12:53:41.200Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + - id: '492272877002819479' + administration_id: 123 + contact_id: '492272876993382294' + contact: + id: '492272876993382294' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:41.172Z' + updated_at: '2026-07-10T12:53:41.172Z' + version: 1783688021 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: Invoice 1 + entry_number: 101 + origin: null + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:41.181Z' + updated_at: '2026-07-10T12:53:41.184Z' + version: 1783688021 + details: + - id: '492272877003868056' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Invoice detail description + price: '100.0' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '100.0' + total_price_excl_tax_with_discount_base: '100.0' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:53:41.183Z' + updated_at: '2026-07-10T12:53:41.183Z' + payments: [] + total_paid: '0.0' + total_unpaid: '121.0' + total_unpaid_base: '121.0' + prices_are_incl_tax: false + total_price_excl_tax: '100.0' + total_price_excl_tax_base: '100.0' + total_price_incl_tax: '121.0' + total_price_incl_tax_base: '121.0' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: [] + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '100.0' + taxable_amount_base: '100.0' + tax_amount: '21.0' + tax_amount_base: '21.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyExternalSalesInvoicesAreRequested: + summary: Returns an error when too many external sales invoices are requested + value: + error: per_page does not have a valid value + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorMessageIfFilterContactIdIsNotFound: + summary: Returns an error message if filter contact id is not found + value: + error: record not found + symbolic: + contact_id: not_found + operationId: get_administration_id_external_sales_invoices + post: + summary: Create an external sales invoice + description: |- + Creates a new external sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - External sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + external_sales_invoice: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + reference: + type: string + description: The invoice number or reference from the external system that created this invoice, e.g. a webshop order ID. + date: + type: string + description: The date of the invoice. + format: date + due_date: + type: string + description: The date by which the invoice should be paid. + format: date + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the invoice are inclusive of tax. Defaults to the administration setting. + source: + type: string + description: The name of the external system that created this invoice, e.g. your webshop or POS system name. + source_url: + type: string + description: A URL linking back to the invoice in the external system. + details_attributes: + $ref: '#/components/schemas/details_attributes' + required: [] + required: [] + examples: + CreateABasicExternalSalesInvoice: + summary: Create a basic external sales invoice + value: + external_sales_invoice: + reference: '30052' + contact_id: 492272878605042750 + details_attributes: + - description: Rocking Chair + price: 129.95 + CreateAnExternalSalesInvoiceInAForeignCurrency: + summary: Create an external sales invoice in a foreign currency + value: + external_sales_invoice: + reference: '30052' + contact_id: 492272878780154940 + currency: USD + details_attributes: + - description: Rocking Chair + price: 159.99 + tax_rate_id: 492272878775960640 + responses: + '201': + description: External sales invoice created + content: + application/json: + schema: + $ref: '#/components/schemas/external_sales_invoice_response' + examples: + CreateABasicExternalSalesInvoice: + summary: Create a basic external sales invoice + value: + id: '492272878638597178' + administration_id: 123 + contact_id: '492272878605042744' + contact: + id: '492272878605042744' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: BE0123456789 + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: '2026-07-10T12:53:42.706Z' + tax_number_valid: true + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:42.709Z' + updated_at: '2026-07-10T12:53:42.709Z' + version: 1783688022 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: '30052' + entry_number: 1 + origin: api + source: null + source_url: null + currency: EUR + paid_at: null + created_at: '2026-07-10T12:53:42.741Z' + updated_at: '2026-07-10T12:53:42.744Z' + version: 1783688022 + details: + - id: '492272878639645755' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Rocking Chair + price: '129.95' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '129.95' + total_price_excl_tax_with_discount_base: '129.95' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:42.743Z' + updated_at: '2026-07-10T12:53:42.743Z' + payments: [] + total_paid: '0.0' + total_unpaid: '157.24' + total_unpaid_base: '157.24' + prices_are_incl_tax: false + total_price_excl_tax: '129.95' + total_price_excl_tax_base: '129.95' + total_price_incl_tax: '157.24' + total_price_incl_tax_base: '157.24' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: external_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:42.747Z' + updated_at: '2026-07-10T12:53:42.747Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '129.95' + taxable_amount_base: '129.95' + tax_amount: '27.29' + tax_amount_base: '27.29' + CreateAnExternalSalesInvoiceInAForeignCurrency: + summary: Create an external sales invoice in a foreign currency + value: + id: '492272878811612242' + administration_id: 123 + contact_id: '492272878780154960' + contact: + id: '492272878780154960' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: BE0123456789 + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: invoices@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: invoices@example.com + send_estimates_to_attention: null + send_estimates_to_email: estimates@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: '2026-07-10T12:53:42.874Z' + tax_number_valid: true + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:42.876Z' + updated_at: '2026-07-10T12:53:42.876Z' + version: 1783688022 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + date: '2026-07-10' + state: open + due_date: null + reference: '30052' + entry_number: 1 + origin: api + source: null + source_url: null + currency: USD + paid_at: null + created_at: '2026-07-10T12:53:42.907Z' + updated_at: '2026-07-10T12:53:42.910Z' + version: 1783688022 + details: + - id: '492272878813709395' + administration_id: 123 + tax_rate_id: '492272878775960654' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Rocking Chair + price: '159.99' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '159.99' + total_price_excl_tax_with_discount_base: '127.99' + tax_report_reference: + - NL/3a + mandatory_tax_text: Intracommunautaire levering, artikel 138, lid 1, Richtlijn 2006/112 + created_at: '2026-07-10T12:53:42.909Z' + updated_at: '2026-07-10T12:53:42.909Z' + payments: [] + total_paid: '0.0' + total_unpaid: '159.99' + total_unpaid_base: '127.99' + prices_are_incl_tax: false + total_price_excl_tax: '159.99' + total_price_excl_tax_base: '127.99' + total_price_incl_tax: '159.99' + total_price_incl_tax_base: '127.99' + marked_dubious_on: null + marked_uncollectible_on: null + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: external_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:42.912Z' + updated_at: '2026-07-10T12:53:42.912Z' + tax_totals: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenRequiredParamsAreIncorrect: + summary: Returns 400 when required params are incorrect + value: + error: Contact ID is invalid + symbolic: + external_sales_invoice: + contact_id: contact_invalid + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenADetailReferencesAUnknownProjectIdForThisAdministration: + summary: Returns 422 when a detail references a unknown project id for this administration + value: + error: + details.project_id: + - is not found + reference: + - can't be blank + details: + details.project_id: + - error: invalid + reference: + - error: blank + Returns422WhenDateIsNotAValidDateString: + summary: Returns 422 when date is not a valid date string + value: + error: + date: + - is not a valid date + reference: + - can't be blank + details: + date: + - error: is not a valid date + reference: + - error: blank + operationId: post_administration_id_external_sales_invoices + /{administration_id}/financial_accounts{format}: + get: + summary: Retrieve all available financial accounts for the administration + description: |- + Retrieve the financial accounts for the administration. Only active financial accounts are returned; inactive (archived) accounts are omitted. + + ### Required scope(s) + `settings` + tags: + - Financial accounts + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of financial accounts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/financial_account_response' + examples: + ReturnsAllFinancialAccountsOfAnAdministration: + summary: Returns all financial accounts of an administration + value: + - id: '492272865848067954' + administration_id: 123 + type: CreditCardAccount + name: Creditcard 0001 + identifier: '0001' + currency: EUR + provider: null + active: true + created_at: '2026-07-10T12:53:30.543Z' + updated_at: '2026-07-10T12:53:30.543Z' + operationId: get_administration_id_financial_accounts + /{administration_id}/financial_mutations/synchronization{format}: + get: + summary: List all ids and versions + description: |- + Returns all financial mutations in the administration. The list contains the id and the version of the financial mutation. + Check if the version of the financial mutation is newer than the version you have stored locally, use the `POST` + variant for fetching financial mutations with the given ids. + + ### Required scope(s) + `bank` + tags: + - Financial mutations + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | period | `String` | `this_year` | This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | + | state | `String` | | Can be `all`, `unprocessed` or `processed`| + | mutation_type | `String` | | Can be `all`, `debit` or `credit` | + | financial_account_id | `String` | | + schema: + type: string + default: period:this_year + examples: + RetrievesTheIdSForSynchronizationWithAFilter: + summary: Retrieves the id's for synchronization with a filter + value: period:this_month + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesTheIdSForSynchronization: + summary: Retrieves the id's for synchronization + value: + - id: '492272958529603205' + version: 1783688098 + - id: '492272958586226318' + version: 1783688098 + - id: '492272958609294999' + version: 1783688099 + RetrievesTheIdSForSynchronizationWithAFilter: + summary: Retrieves the id's for synchronization with a filter + value: + - id: '492272958680598179' + version: 1783688099 + - id: '492272958703666860' + version: 1783688099 + - id: '492272958725686965' + version: 1783688099 + RetrievesOnlyUniqueIds: + summary: Retrieves only unique ids + value: + - id: '492272958793844417' + version: 1783688099 + - id: '492272958813767370' + version: 1783688099 + - id: '492272958834738899' + version: 1783688099 + operationId: get_administration_id_financial_mutations_synchronization + post: + summary: Fetch financial mutations with given ids + description: |- + Given a list of financial mutation ids, returns the financial mutation information belonging to the financial mutation. + Returns a maximum of 100 financial mutations, even if more ids are provided. + + ### Required scope(s) + `bank` + tags: + - Financial mutations + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesFinancialMutationsGivenByIds: + summary: Retrieves financial mutations given by ids + value: + ids: + - 492272959095834400 + - 492272959117854460 + responses: + '200': + description: A financial mutation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/financial_mutation_response' + examples: + RetrievesFinancialMutationsGivenByIds: + summary: Retrieves financial mutations given by ids + value: + - id: '492272959117854485' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Factuur + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272959049697023' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:54:59.492Z' + updated_at: '2026-07-10T12:54:59.492Z' + version: 1783688099 + financial_statement_id: '492272959115757332' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + - id: '492272959095834380' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Factuur + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272959049697023' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:54:59.471Z' + updated_at: '2026-07-10T12:54:59.471Z' + version: 1783688099 + financial_statement_id: '492272959093737227' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + '400': + $ref: '#/components/responses/400_bad_request' + operationId: post_administration_id_financial_mutations_synchronization + /{administration_id}/financial_mutations/{id}/link_booking{format}: + patch: + summary: Links a financial mutation to a booking + description: |- + Linking a booking to a financial mutations allows you to process financial mutations. Financial mutations can be + linked to invoices, documents, ledger accounts and payment batches. + + ### Required scope(s) + `bank` + tags: + - Financial mutations + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + booking_type: + type: string + description: The type of record to link the mutation to. + enum: + - SalesInvoice + - Document + - LedgerAccount + - PaymentTransactionBatch + - PurchaseTransaction + - NewPurchaseInvoice + - NewReceipt + - PaymentTransaction + - PurchaseTransactionBatch + - ExternalSalesInvoice + - Payment + - VatDocument + booking_id: + $ref: '#/components/schemas/identifier' + description: The id of the record to link, of the type set in `booking_type` (e.g. the ledger account id when `booking_type` is `LedgerAccount`). + price_base: + $ref: '#/components/schemas/number' + description: |- + The booking amount, in the administration's base currency. For most + booking types — including `LedgerAccount`, `NewPurchaseInvoice`, + `NewReceipt` and payment transactions — this is the field that carries + the amount. When linking a payment to an invoice it is the + base-currency counterpart of `price`. For `booking_type` + `LedgerAccount` send the amount here; `price` is ignored. Both a + decimal and a string '10,95' are accepted. + price: + $ref: '#/components/schemas/number' + description: |- + Amount in the booking's own currency, used when linking a payment to + an invoice. For a foreign-currency invoice both `price` and + `price_base` are required. Not used for `booking_type` + `LedgerAccount` — use `price_base` there instead. Both a decimal and + a string '10,95' are accepted. + description: + type: string + payment_batch_identifier: + type: string + project_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid project id. + mark_open_sepa_transaction_as_paid: + type: + - boolean + - string + required: + - booking_type + examples: + CreatesANewReceipt: + summary: Creates a new receipt + value: + booking_type: NewReceipt + price_base: -100 + LinksAPurchaseInvoiceToTheFinancialMutation: + summary: Links a purchase invoice to the financial mutation + value: + booking_type: Document + booking_id: 492272961180402700 + price_base: -100 + CreatesABookingForAForeignInvoiceWithAnExchangeRateDifference: + summary: Creates a booking for a foreign invoice with an exchange rate difference + value: + booking_type: LedgerAccount + booking_id: 492272961596687400 + price_base: 1.48 + CreatesALedgerAccountBookingForAPositiveAmount: + summary: Creates a ledger account booking for a positive amount + value: + booking_type: LedgerAccount + booking_id: 492272961710982300 + price_base: 100 + CreatesANewPurchaseInvoice: + summary: Creates a new purchase invoice + value: + booking_type: NewPurchaseInvoice + price_base: -100 + CreatesALedgerAccountBookingForANegativeAmount: + summary: Creates a ledger account booking for a negative amount + value: + booking_type: LedgerAccount + booking_id: 492272962084275300 + price_base: 100 + LinksASalesInvoiceToTheFinancialMutation: + summary: Links a sales invoice to the financial mutation + value: + booking_type: SalesInvoice + booking_id: 492272962450228400 + price_base: '363.0' + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + CreatesANewReceipt: + summary: Creates a new receipt + value: 200 + LinksAPurchaseInvoiceToTheFinancialMutation: + summary: Links a purchase invoice to the financial mutation + value: 200 + CreatesABookingForAForeignInvoiceWithAnExchangeRateDifference: + summary: Creates a booking for a foreign invoice with an exchange rate difference + value: 200 + CreatesALedgerAccountBookingForAPositiveAmount: + summary: Creates a ledger account booking for a positive amount + value: 200 + CreatesANewPurchaseInvoice: + summary: Creates a new purchase invoice + value: 200 + CreatesALedgerAccountBookingForANegativeAmount: + summary: Creates a ledger account booking for a negative amount + value: 200 + LinksASalesInvoiceToTheFinancialMutation: + summary: Links a sales invoice to the financial mutation + value: 200 + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400InsteadOfCrashingWhenPriceBaseIsOmittedForANegativeMutation: + summary: Returns a 400 instead of crashing when price base is omitted for a negative mutation + value: + error: Price can't be nil + symbolic: + price: nils + '404': + $ref: '#/components/responses/404_not_found' + operationId: patch_administration_id_financial_mutations_id_link_booking + /{administration_id}/financial_mutations/{id}/unlink_booking{format}: + delete: + summary: Unlinks a booking from a financial mutation + description: |- + Unlinks a booking from a financial mutation. + + ### Required scope(s) + `bank` + tags: + - Financial mutations + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + booking_type: + type: string + enum: + - Payment + - LedgerAccountBooking + description: Can be `Payment` or `LedgerAccountBooking`. + booking_id: + $ref: '#/components/schemas/identifier' + required: + - booking_type + - booking_id + examples: + UnlinksAPaymentBooking: + summary: Unlinks a payment booking + value: + booking_type: Payment + booking_id: 492272960082544500 + responses: + '200': + description: A financial mutation + content: + application/json: + schema: + $ref: '#/components/schemas/financial_mutation_response' + examples: + UnlinksAPaymentBooking: + summary: Unlinks a payment booking + value: + id: '492272959838226279' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Factuur + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272959812011875' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:55:00.179Z' + updated_at: '2026-07-10T12:55:00.504Z' + version: 1783688100 + financial_statement_id: '492272959837177702' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorIfBookingTypeIsInvalid: + summary: Returns an error if booking type is invalid + value: + error: Booking Type isn't an option + symbolic: + booking_type: in + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorIfBookingIdIsNotFound: + summary: Returns an error if booking id is not found + value: + error: record not found + symbolic: + booking_id: not_found + operationId: delete_administration_id_financial_mutations_id_unlink_booking + /{administration_id}/financial_mutations/{id}{format}: + get: + summary: Get a financial mutation by id + description: |- + Returns a single financial mutation in the administration. + + ### Required scope(s) + `bank` + tags: + - Financial mutations + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A financial mutation + content: + application/json: + schema: + $ref: '#/components/schemas/financial_mutation_response' + examples: + ReturnsFinancialMutationByTheGivenId: + summary: Returns financial mutation by the given id + value: + id: '492272960236685195' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Factuur + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272960214665095' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:55:00.559Z' + updated_at: '2026-07-10T12:55:00.559Z' + version: 1783688100 + financial_statement_id: '492272960235636618' + processed_at: null + account_servicer_transaction_id: null + payments: + - id: '492272960317425564' + administration_id: 123 + invoice_type: SalesInvoice + invoice_id: '492272960291211160' + financial_account_id: '492272960214665095' + user_id: 1 + payment_transaction_id: null + transaction_identifier: null + price: '80.0' + price_base: '80.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: '492272960236685195' + ledger_account_id: '492272960314279835' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:55:00.636Z' + updated_at: '2026-07-10T12:55:00.636Z' + ledger_account_bookings: + - id: '492272960258705300' + administration_id: 123 + financial_mutation_id: '492272960236685195' + ledger_account_id: '492272960255559571' + project_id: null + description: Ledger account booking + price: '20.0' + created_at: '2026-07-10T12:55:00.580Z' + updated_at: '2026-07-10T12:55:00.580Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheFinancialMutationDoesNotExist: + summary: Returns 404 when the financial mutation does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_financial_mutations_id + /{administration_id}/financial_mutations{format}: + get: + summary: List all financial mutations + description: |- + Returns a list of financial mutations in the administration. Limited to 100 financial mutations. If you + need more financial mutations, use the [synchronize](#get_financial_mutations_synchronization) API. + + ### Required scope(s) + `bank` + tags: + - Financial mutations + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:unprocessed`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | + | state | `String` | `all` | `all`, `unprocessed`, `processed` or `auto_booked` | + | mutation_type | `String` | `all` | `all`, `debit` or `credit` | + | financial_account_id | `Integer` | | Restrict to a single financial account | + | amount_from | `String` | | Lower bound on the absolute mutation amount (negative input is treated as positive) | + | amount_to | `String` | | Upper bound on the absolute mutation amount | + + Multiple values for `state` and `mutation_type` can be combined with a pipe, e.g. `state:unprocessed|processed`. + schema: + type: string + default: period:this_year + examples: + ReturnsAllMutationsFilteredOnPeriod: + summary: Returns all mutations filtered on period + value: period:this_month + responses: + '200': + description: A list of financial mutations + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/financial_mutation_response' + examples: + ReturnsAllMutationsFilteredOnPeriod: + summary: Returns all mutations filtered on period + value: + - id: '492272960536577975' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Factuur + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272960514557875' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:55:00.845Z' + updated_at: '2026-07-10T12:55:00.845Z' + version: 1783688100 + financial_statement_id: '492272960535529398' + processed_at: null + account_servicer_transaction_id: null + payments: + - id: '492272960619415496' + administration_id: 123 + invoice_type: SalesInvoice + invoice_id: '492272960592152516' + financial_account_id: '492272960514557875' + user_id: 1 + payment_transaction_id: null + transaction_identifier: null + price: '80.0' + price_base: '80.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: '492272960536577975' + ledger_account_id: '492272960616269767' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:55:00.924Z' + updated_at: '2026-07-10T12:55:00.924Z' + ledger_account_bookings: + - id: '492272960560695232' + administration_id: 123 + financial_mutation_id: '492272960536577975' + ledger_account_id: '492272960557549503' + project_id: null + description: Ledger account booking + price: '20.0' + created_at: '2026-07-10T12:55:00.868Z' + updated_at: '2026-07-10T12:55:00.868Z' + ReturnsAllFinancialMutationsOfAnAdministration: + summary: Returns all financial mutations of an administration + value: + - id: '492272960701204429' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Factuur + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272960671844297' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:55:01.002Z' + updated_at: '2026-07-10T12:55:01.002Z' + version: 1783688101 + financial_statement_id: '492272960700155852' + processed_at: null + account_servicer_transaction_id: null + payments: + - id: '492272960797673438' + administration_id: 123 + invoice_type: SalesInvoice + invoice_id: '492272960773556186' + financial_account_id: '492272960671844297' + user_id: 1 + payment_transaction_id: null + transaction_identifier: null + price: '80.0' + price_base: '80.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: '492272960701204429' + ledger_account_id: '492272960795576285' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:55:01.095Z' + updated_at: '2026-07-10T12:55:01.095Z' + ledger_account_bookings: + - id: '492272960741050326' + administration_id: 123 + financial_mutation_id: '492272960701204429' + ledger_account_id: '492272960738953173' + project_id: null + description: Ledger account booking + price: '20.0' + created_at: '2026-07-10T12:55:01.041Z' + updated_at: '2026-07-10T12:55:01.041Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + RaisesAnErrorWhenThereAreTooManyMutationsToReturn: + summary: Raises an error when there are too many mutations to return + value: + error: Too many financial mutations to return, please use sync API + operationId: get_administration_id_financial_mutations + /{administration_id}/financial_statements/{id}{format}: + delete: + summary: Delete a financial statement + description: |- + Deletes a financial statement. + + ### Required scope(s) + `bank` + tags: + - Financial statements + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Financial statement deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenTheFinancialStatementIsNotFound: + summary: Returns a 404 status when the financial statement is not found + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_financial_statements_id + patch: + summary: Update a financial statement + description: |- + When updating a financial statement, you only need to provide the information you want to change. Attributes you don't + provide in the request will not be updated. + + ### Required scope(s) + `bank` + tags: + - Financial statements + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + financial_statement: + type: object + unevaluatedProperties: false + properties: + reference: + type: string + description: A unique reference for this financial statement, e.g. the bank statement number. + official_date: + type: string + description: The date of the official bank balance. + format: date + official_balance: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_mutations_attributes: + oneOf: + - type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: integer + description: The ID of an existing financial mutation to update. Omit when adding a new mutation. + date: + type: string + format: date + description: The transaction date. + message: + type: string + description: The description or narrative of the bank transaction. + amount: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + code: + type: string + description: The bank transaction type code. Primarily used internally for bank statement imports and automatic booking; most API users can omit this. + contra_account_name: + type: string + description: The name of the counterparty's account holder. + contra_account_number: + type: string + description: The account number (IBAN) of the counterparty. + batch_reference: + type: string + description: A reference identifying a batch of transactions. + offset: + type: integer + description: The position offset of this mutation within the statement. + account_servicer_transaction_id: + type: string + description: A unique transaction ID assigned by the bank. Used internally for deduplication when importing bank statements. + adyen_payment_instrument_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid adyen payment instrument id. + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this financial mutation from the statement. + required: [] + - type: object + additionalProperties: + type: object + properties: + id: + type: integer + description: The ID of an existing financial mutation to update. Omit when adding a new mutation. + date: + type: string + format: date + description: The transaction date. + message: + type: string + description: The description or narrative of the bank transaction. + amount: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + code: + type: string + description: The bank transaction type code. Primarily used internally for bank statement imports and automatic booking; most API users can omit this. + contra_account_name: + type: string + description: The name of the counterparty's account holder. + contra_account_number: + type: string + description: The account number (IBAN) of the counterparty. + batch_reference: + type: string + description: A reference identifying a batch of transactions. + offset: + type: integer + description: The position offset of this mutation within the statement. + account_servicer_transaction_id: + type: string + description: A unique transaction ID assigned by the bank. Used internally for deduplication when importing bank statements. + adyen_payment_instrument_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid adyen payment instrument id. + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this financial mutation from the statement. + required: [] + required: [] + required: [] + examples: + UpdatesAFinancialStatement: + summary: Updates a financial statement + value: + financial_statement: + reference: new_reference + financial_mutations_attributes: + '0': + message: Foobar 1 + date: '2026-07-10' + amount: 100 + responses: + '200': + description: Financial statement updated + content: + application/json: + schema: + $ref: '#/components/schemas/financial_statement_response' + examples: + UpdatesAFinancialStatement: + summary: Updates a financial statement + value: + id: '492272882231018737' + financial_account_id: '492272882157618414' + reference: new_reference + official_date: null + official_balance: null + importer_service: null + financial_mutations: + - id: '492272882235213043' + administration_id: 123 + amount: '-20.0' + code: null + date: '2026-07-09' + message: Afboeking + contra_account_name: Krant + contra_account_number: CH3608387000001080173 + state: unprocessed + settlement_state: settled + amount_open: '-20.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272882157618414' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:53:46.171Z' + updated_at: '2026-07-10T12:53:46.171Z' + version: 1783688026 + financial_statement_id: '492272882231018737' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + - id: '492272882233115890' + administration_id: 123 + amount: '322.78' + code: null + date: '2026-07-10' + message: |- + 637034759 B & S CARD SERVICE GMBH + 0001234567EINREICH ABR.280000000 + 321 / 333,60 -SERV 10,82 +0%MWST + 0,00 REF VU0251478 + contra_account_name: Internetprovider + contra_account_number: BE68539007547034 + state: unprocessed + settlement_state: settled + amount_open: '322.78' + sepa_fields: null + batch_reference: null + financial_account_id: '492272882157618414' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:53:46.169Z' + updated_at: '2026-07-10T12:53:46.169Z' + version: 1783688026 + financial_statement_id: '492272882231018737' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + - id: '492272882333779202' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Foobar 1 + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272882157618414' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:53:46.265Z' + updated_at: '2026-07-10T12:53:46.265Z' + version: 1783688026 + financial_statement_id: '492272882231018737' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404StatusWhenTheStatementIsNotFound: + summary: Returns a 404 status when the statement is not found + value: + error: 'Record not found for model name: Financial statement' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsAnErrorWhenInvalidInputIsGiven: + summary: Returns an error when invalid input is given + value: + error: + reference: + - can't be blank + details: + reference: + - error: blank + operationId: patch_administration_id_financial_statements_id + /{administration_id}/financial_statements{format}: + post: + summary: Create a new financial statement + description: |- + Creates a new financial statement. Provided financial mutations will be grouped in the statement. + + ### Required scope(s) + `bank` + tags: + - Financial statements + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + financial_statement: + type: object + unevaluatedProperties: false + properties: + financial_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial account id. + reference: + type: string + description: A unique reference for this financial statement, e.g. the bank statement number. + official_date: + type: string + format: date + description: The date of the official bank balance. + official_balance: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + importer_key: + type: string + description: An identifier for the import source or batch, e.g. a bank feed provider reference. + financial_mutations_attributes: + oneOf: + - type: array + items: + type: object + unevaluatedProperties: false + properties: + date: + type: string + format: date + description: The transaction date. + valutation_date: + type: string + format: date + description: The value date of the transaction, i.e. when the funds are actually credited or debited. May differ from the transaction date. + message: + type: string + description: The description or narrative of the bank transaction as provided by the bank. + amount: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + code: + type: string + description: The bank transaction type code, e.g. a SWIFT transaction code. Primarily used internally for bank statement imports and automatic booking; most API users can omit this. + contra_account_name: + type: string + description: The name of the counterparty's account holder. + contra_account_number: + type: string + description: The account number (IBAN) of the counterparty. + batch_reference: + type: string + description: A reference identifying a batch of transactions, e.g. for grouped SEPA payments. + offset: + type: integer + description: The position offset of this mutation within the statement. Used for ordering. + account_servicer_transaction_id: + type: string + description: A unique transaction ID assigned by the bank. Used for deduplication. + account_servicer_metadata: + type: object + description: Additional metadata provided by the bank for this transaction. + adyen_payment_instrument_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid adyen payment instrument id. + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this financial mutation from the statement. + smart_transfer: + type: + - boolean + - string + description: Indicates that this financial mutation was created by a smart transfer rule. + required: [] + - type: object + additionalProperties: + type: object + properties: + date: + type: string + format: date + description: The transaction date. + valutation_date: + type: string + format: date + description: The value date of the transaction, i.e. when the funds are actually credited or debited. May differ from the transaction date. + message: + type: string + description: The description or narrative of the bank transaction as provided by the bank. + amount: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + code: + type: string + description: The bank transaction type code, e.g. a SWIFT transaction code. Primarily used internally for bank statement imports and automatic booking; most API users can omit this. + contra_account_name: + type: string + description: The name of the counterparty's account holder. + contra_account_number: + type: string + description: The account number (IBAN) of the counterparty. + batch_reference: + type: string + description: A reference identifying a batch of transactions, e.g. for grouped SEPA payments. + offset: + type: integer + description: The position offset of this mutation within the statement. Used for ordering. + account_servicer_transaction_id: + type: string + description: A unique transaction ID assigned by the bank. Used for deduplication. + account_servicer_metadata: + type: object + description: Additional metadata provided by the bank for this transaction. + adyen_payment_instrument_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid adyen payment instrument id. + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this financial mutation from the statement. + smart_transfer: + type: + - boolean + - string + description: Indicates that this financial mutation was created by a smart transfer rule. + required: [] + required: + - reference + required: [] + examples: + CreatesAFinancialStatement: + summary: Creates a financial statement + value: + financial_statement: + reference: 31012014_ABNAMRO + financial_account_id: 492272882434442560 + financial_mutations_attributes: + '1': + date: '2026-07-10' + message: Foobar 1 + amount: 100 + '2': + date: '2026-07-10' + message: Foobar 2 + amount: 200 + responses: + '201': + description: Financial statement created + content: + application/json: + schema: + $ref: '#/components/schemas/financial_statement_response' + examples: + CreatesAFinancialStatement: + summary: Creates a financial statement + value: + id: '492272882459608360' + financial_account_id: '492272882434442533' + reference: 31012014_ABNAMRO + official_date: null + official_balance: null + importer_service: null + financial_mutations: + - id: '492272882461705513' + administration_id: 123 + amount: '100.0' + code: null + date: '2026-07-10' + message: Foobar 1 + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '100.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272882434442533' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:53:46.387Z' + updated_at: '2026-07-10T12:53:46.387Z' + version: 1783688026 + financial_statement_id: '492272882459608360' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + - id: '492272882463802666' + administration_id: 123 + amount: '200.0' + code: null + date: '2026-07-10' + message: Foobar 2 + contra_account_name: null + contra_account_number: '' + state: unprocessed + settlement_state: settled + amount_open: '200.0' + sepa_fields: null + batch_reference: null + financial_account_id: '492272882434442533' + currency: EUR + original_amount: null + created_at: '2026-07-10T12:53:46.389Z' + updated_at: '2026-07-10T12:53:46.389Z' + version: 1783688026 + financial_statement_id: '492272882459608360' + processed_at: null + account_servicer_transaction_id: null + payments: [] + ledger_account_bookings: [] + '400': + $ref: '#/components/responses/400_bad_request' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_financial_statements + /{administration_id}/identities/default{format}: + get: + summary: Retrieve the default identity + description: |- + Returns the default identity of this administration. + + ### Required scope(s) + `settings` + tags: + - Identities + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of identities + content: + application/json: + schema: + $ref: '#/components/schemas/identity_response' + examples: + ReturnsTheDefaultIdentity: + summary: Returns the default identity + value: + id: '492272801888076907' + administration_id: 123 + company_name: Parkietje B.V. + city: Enschede + country: NL + zipcode: 7523XD + address1: Brouwerijstraat 26 + address2: null + email: info@dev.null.moneybird.net + phone: '0612345678' + bank_account_name: null + bank_account_number: NL50TEST0166567191 + bank_account_bic: null + custom_fields: [] + updated_at: '2026-07-10T12:52:29.542Z' + created_at: '2026-07-10T12:52:29.542Z' + chamber_of_commerce: '08155914' + tax_number: NL817575546B01 + operationId: get_administration_id_identities_default + patch: + summary: Updates the default identity + description: |- + Updates the default identity. + + ### Required scope(s) + `settings` + tags: + - Identities + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + identity: + type: object + unevaluatedProperties: false + properties: + company_name: + type: string + legal_entity_type: + type: string + enum: + - eenmanszaak + - maatschap + - vof + - bv + - cv + - nv + - stichting + - vereniging + - coöperatie + - geen_kvk_inschrijving + country: + type: string + description: ISO two-character country code, e.g. NL or DE. + city: + type: string + zipcode: + type: string + address1: + type: string + address2: + type: string + email: + type: string + description: Should be a valid email addresses. + phone: + type: string + bank_account_name: + type: string + bank_account_number: + type: string + bank_account_bic: + type: string + chamber_of_commerce: + type: string + tax_number: + type: string + tax_number_absence_reason: + type: string + description: Can be `below_tax_threshold` or `industry_exemption`. + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + administration_attributes: + unevaluatedProperties: false + properties: + legal_entity_type: + type: string + enum: + - eenmanszaak + - maatschap + - vof + - bv + - cv + - nv + - stichting + - vereniging + - coöperatie + - geen_kvk_inschrijving + required: [] + required: [] + required: [] + examples: + UpdatesTheDefaultIdentity: + summary: Updates the default identity + value: + identity: + company_name: Second B.V. + responses: + '200': + description: A list of identities + content: + application/json: + schema: + $ref: '#/components/schemas/identity_response' + examples: + UpdatesTheDefaultIdentity: + summary: Updates the default identity + value: + id: '492272801888076907' + administration_id: 123 + company_name: Second B.V. + city: Enschede + country: NL + zipcode: 7523XD + address1: Brouwerijstraat 26 + address2: null + email: info@dev.null.moneybird.net + phone: '0612345678' + bank_account_name: null + bank_account_number: NL50TEST0166567191 + bank_account_bic: null + custom_fields: [] + updated_at: '2026-07-10T12:52:48.053Z' + created_at: '2026-07-10T12:52:29.542Z' + chamber_of_commerce: '08155914' + tax_number: NL817575546B01 + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenUpdatingTheDefaultIdentityWithInvalidParams: + summary: Returns 422 when updating the default identity with invalid params + value: + error: + company_name: + - can't be blank + details: + company_name: + - error: blank + operationId: patch_administration_id_identities_default + /{administration_id}/identities/{id}{format}: + get: + summary: Retrieve identity by given id + description: |- + Returns the identity with the given id. + + ### Required scope(s) + `settings` + tags: + - Identities + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A identity + content: + application/json: + schema: + $ref: '#/components/schemas/identity_response' + examples: + ReturnsASingleIdentity: + summary: Returns a single identity + value: + id: '492272819892126759' + administration_id: 123 + company_name: Parkietje B.V. + city: Den Haag + country: NL + zipcode: 4321XY + address1: Brouwersplein 62 + address2: null + email: info@dev.null.moneybird.net + phone: 1234-5678900 + bank_account_name: Foobar B.V. + bank_account_number: NL80TEST0252789466 + bank_account_bic: null + custom_fields: [] + updated_at: '2026-07-10T12:52:46.716Z' + created_at: '2026-07-10T12:52:46.716Z' + chamber_of_commerce: '08155914' + tax_number: NL817575546B01 + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenIdentityDoesNotExist: + summary: Returns 404 when identity does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_identities_id + patch: + summary: Updates an identity + description: |- + Updates an identity. + + ### Required scope(s) + `settings` + tags: + - Identities + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + identity: + type: object + unevaluatedProperties: false + properties: + company_name: + type: string + country: + type: string + description: ISO two-character country code, e.g. NL or DE. + city: + type: string + zipcode: + type: string + address1: + type: string + address2: + type: string + email: + type: string + description: Should be a valid email addresses. + phone: + type: string + bank_account_name: + type: string + bank_account_number: + type: string + bank_account_bic: + type: string + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + required: [] + examples: + UpdatesAIdentity: + summary: Updates a identity + value: + identity: + company_name: Second B.V. + responses: + '200': + description: Identity updated + content: + application/json: + schema: + $ref: '#/components/schemas/identity_response' + examples: + UpdatesAIdentity: + summary: Updates a identity + value: + id: '492272820437386323' + administration_id: 123 + company_name: Second B.V. + city: Den Haag + country: NL + zipcode: 4321XY + address1: Brouwersplein 62 + address2: null + email: info@dev.null.moneybird.net + phone: 1234-5678900 + bank_account_name: Foobar B.V. + bank_account_number: NL80TEST0252789466 + bank_account_bic: null + custom_fields: [] + updated_at: '2026-07-10T12:52:47.268Z' + created_at: '2026-07-10T12:52:47.236Z' + chamber_of_commerce: '08155914' + tax_number: NL817575546B01 + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenUpdatingANon-existentIdentity: + summary: Returns 404 when updating a non-existent identity + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenUpdatingAnIdentityWithInvalidParams: + summary: Returns 422 when updating an identity with invalid params + value: + error: + company_name: + - can't be blank + details: + company_name: + - error: blank + operationId: patch_administration_id_identities_id + delete: + summary: Deletes an identity + description: |- + Deletes an identity. Always returns a 204 status code even if the identity could not be deleted. + + ### Required scope(s) + `settings` + tags: + - Identities + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Identity deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + CannotDeleteTheDefaultIdentity: + summary: Cannot delete the default identity + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_identities_id + /{administration_id}/identities{format}: + get: + summary: Retrieve identities + description: |- + An administration can have multiple identities, for example to cover multiple tradenames or offices. This does not include the default identity. + + ### Required scope(s) + `settings` + tags: + - Identities + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of identities + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/identity_response' + examples: + ReturnsAllIdentitiesOfAnAdministration: + summary: Returns all identities of an administration + value: + - id: '492272821044511865' + administration_id: 123 + company_name: Parkietje B.V. + city: Den Haag + country: NL + zipcode: 4321XY + address1: Brouwersplein 62 + address2: null + email: info@dev.null.moneybird.net + phone: 1234-5678900 + bank_account_name: Foobar B.V. + bank_account_number: NL80TEST0252789466 + bank_account_bic: null + custom_fields: [] + updated_at: '2026-07-10T12:52:47.815Z' + created_at: '2026-07-10T12:52:47.815Z' + chamber_of_commerce: '08155914' + tax_number: NL817575546B01 + operationId: get_administration_id_identities + post: + summary: Creates an identity + description: |- + Most fields for an identity are required. You can provide zero or more custom fields, for each provided + custom field value the `id` and `value` are required. + + ### Required scope(s) + `settings` + tags: + - Identities + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + identity: + type: object + unevaluatedProperties: false + properties: + company_name: + type: string + country: + type: string + description: ISO two-character country code, e.g. NL or DE. + city: + type: string + zipcode: + type: string + address1: + type: string + address2: + type: string + email: + type: string + description: Should be a valid email addresses. + phone: + type: string + bank_account_name: + type: string + bank_account_number: + type: string + bank_account_bic: + type: string + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: + - company_name + - country + - city + - zipcode + - address1 + - email + required: [] + examples: + CreatesAnIdentityWithCustomFields: + summary: Creates an identity with custom fields + value: + identity: + company_name: Foobar B.V. + address1: Straat 1 + zipcode: Zipcode + city: Enschede + country: NL + email: foobar@example.com + custom_fields_attributes: + '0': + id: 492272820560069700 + value: my custom value + CreatesAnIdentity: + summary: Creates an identity + value: + identity: + company_name: Foobar B.V. + address1: Straat 1 + zipcode: Zipcode + city: Enschede + country: NL + email: foobar@example.com + responses: + '201': + description: Identity created + content: + application/json: + schema: + $ref: '#/components/schemas/identity_response' + examples: + CreatesAnIdentityWithCustomFields: + summary: Creates an identity with custom fields + value: + id: '492272820609352803' + administration_id: 123 + company_name: Foobar B.V. + city: Enschede + country: NL + zipcode: Zipcode + address1: Straat 1 + address2: null + email: foobar@example.com + phone: null + bank_account_name: null + bank_account_number: null + bank_account_bic: null + custom_fields: + - id: '492272820560069727' + name: custom_field_ea284fe8bdcc8ba556b8 + value: my custom value + updated_at: '2026-07-10T12:52:47.400Z' + created_at: '2026-07-10T12:52:47.400Z' + chamber_of_commerce: '08155914' + tax_number: NL817575546B01 + CreatesAnIdentity: + summary: Creates an identity + value: + id: '492272820742521966' + administration_id: 123 + company_name: Foobar B.V. + city: Enschede + country: NL + zipcode: Zipcode + address1: Straat 1 + address2: null + email: foobar@example.com + phone: null + bank_account_name: null + bank_account_number: null + bank_account_bic: null + custom_fields: [] + updated_at: '2026-07-10T12:52:47.527Z' + created_at: '2026-07-10T12:52:47.527Z' + chamber_of_commerce: '08155914' + tax_number: NL817575546B01 + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenRequiredParamsAreMissingOrInvalid: + summary: Returns 422 when required params are missing or invalid + value: + error: + company_name: + - can't be blank + address1: + - can't be blank + zipcode: + - can't be blank + city: + - can't be blank + country: + - can't be blank + - is invalid + email: + - is not a valid email address + details: + company_name: + - error: blank + address1: + - error: blank + zipcode: + - error: blank + city: + - error: blank + country: + - error: blank + - error: invalid + value: null + email: + - error: invalid_email + operationId: post_administration_id_identities + /{administration_id}/ledger_accounts/{id}{format}: + get: + summary: Returns information about a ledger account + description: |- + Returns information about a ledger account. + + ### Required scope(s) + Any of: `settings`, `sales_invoices`, `documents` or `estimates` + tags: + - Ledger accounts + security: + - bearerAuth: + - settings + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A ledger account + content: + application/json: + schema: + $ref: '#/components/schemas/ledger_account_response' + examples: + ReturnsALedgerAccount: + summary: Returns a ledger account + value: + id: '492273011738543457' + administration_id: 123 + name: Grootboekrekening d45efd37d677bcf6ed35 + account_type: revenue + account_id: '80829' + parent_id: null + active: true + created_at: '2026-07-10T12:55:49.676Z' + updated_at: '2026-07-10T12:55:49.676Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzAovEie + name: Eiergeld + name_english: Egg money + reference: '8008040' + financial_account_id: null + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenRequestingUnexistingLedgerAccount: + summary: Returns 404 when requesting unexisting ledger account + value: + error: 'Record not found for model name: Category' + operationId: get_administration_id_ledger_accounts_id + patch: + summary: Updates a ledger account + description: |- + Updates a ledger account. + + ### Required scope(s) + `settings` + tags: + - Ledger accounts + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ledger_account: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: Should be unique for this combination of administration and account type. + account_id: + type: string + description: Optional field, also known as general ledger code. Should be unique. + account_type: + type: string + enum: + - non_current_assets + - current_assets + - equity + - provisions + - non_current_liabilities + - current_liabilities + - revenue + - direct_costs + - expenses + - other_income_expenses + parent_id: + $ref: '#/components/schemas/identifier' + description: Id of the parent ledger account. Should be a valid ledger account id. + allowed_document_types: + type: string + enum: + - sales_invoice + - purchase_invoice + - general_journal_document + - financial_mutation + - payment + description: Restricts the document types this ledger account can be used on. Defaults to a set derived from the `account_type`. + description: + type: string + required: [] + rgs_code: + type: string + description: Existing RGS version 3.5 code, e.g. 'WMfoBelMfo' + required: [] + examples: + UpdatesTheInformationInTheLedgerAccount: + summary: Updates the information in the ledger account + value: + ledger_account: + name: New name + UpdatesALedgerAccountWithTaxonomyItemByProvidingAnExistingRgsCode: + summary: Updates a ledger account with taxonomy item by providing an existing rgs code + value: + rgs_code: WMfoBelMfo + ledger_account: + name: new name + responses: + '200': + description: Ledger account updated + content: + application/json: + schema: + $ref: '#/components/schemas/ledger_account_response' + examples: + UpdatesTheInformationInTheLedgerAccount: + summary: Updates the information in the ledger account + value: + id: '492273012442137964' + administration_id: 123 + name: New name + account_type: revenue + account_id: '80829' + parent_id: null + active: true + created_at: '2026-07-10T12:55:50.346Z' + updated_at: '2026-07-10T12:55:50.373Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzAovEie + name: Eiergeld + name_english: Egg money + reference: '8008040' + financial_account_id: null + UpdatesALedgerAccountWithTaxonomyItemByProvidingAnExistingRgsCode: + summary: Updates a ledger account with taxonomy item by providing an existing rgs code + value: + id: '492273012514489711' + administration_id: 123 + name: new name + account_type: revenue + account_id: '80829' + parent_id: null + active: true + created_at: '2026-07-10T12:55:50.416Z' + updated_at: '2026-07-10T12:55:50.444Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WMfoBelMfo + name: Mutatie fiscale oudedagsreserve + name_english: Change in tax-deferred retirement reserve + reference: '9104010' + financial_account_id: null + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404WhenTheLedgerAccountDoesNotExist: + summary: Returns a 404 when the ledger account does not exist + value: + error: record not found + symbolic: + id: not_found + ReturnsErrorWhenProvidedRgsCodeDoesNotBelongToATaxonomyItemOfVersion35: + summary: Returns error when provided rgs code does not belong to a taxonomy item of version 3.5 + value: + error: Given RGS code does not belong to a taxonomy item of version 3.5 + symbolic: + rgs_code: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsAnErrorWhenValidationsAreFailing: + summary: Returns an error when validations are failing + value: + error: + name: + - can't be blank + details: + name: + - error: blank + operationId: patch_administration_id_ledger_accounts_id + delete: + summary: Deletes a ledger account + description: |- + Deletes or deactivates a ledger account. + First, an attempt is made to deactivate the ledger account. + If that fails, an attempt is made to delete the ledger account. + Always returns a 204 status code even if the ledger account could not be deleted or deactivated. + + ### Required scope(s) + `settings` + tags: + - Ledger accounts + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Ledger account deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheLedgerAccountDoesNotExist: + summary: Returns 404 when the ledger account does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_ledger_accounts_id + /{administration_id}/ledger_accounts{format}: + get: + summary: List all ledger accounts of an administration + description: |- + Returns a list of all the ledger accounts in the administration. + + Pagination is not supported for this endpoint. + + ### Required scope(s) + Any of: `settings`, `sales_invoices`, `documents` or `estimates` + tags: + - Ledger accounts + security: + - bearerAuth: + - settings + - bearerAuth: + - sales_invoices + - bearerAuth: + - documents + - bearerAuth: + - estimates + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of ledger accounts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ledger_account_response' + examples: + CanRequestTheLedgerAccountsIfTheUserHasPermissionForSalesInvoices: + summary: Can request the ledger accounts if the user has permission for sales invoices + value: + - id: '492272802100937845' + administration_id: 123 + name: Algemene kosten + account_type: expenses + account_id: '46801.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.895Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802141832329' + administration_id: 123 + name: Betaalde en/of ontvangen btw + account_type: current_liabilities + account_id: '16221.01' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.878Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwAfo + name: Afgedragen omzetbelasting + name_english: Remitted Value Added Tax + reference: '1205010.13' + financial_account_id: null + - id: '492272802100937848' + administration_id: 123 + name: Btw + account_type: current_liabilities + account_id: '16221.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.883Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOvm + name: Overige mutaties omzetbelasting + name_english: Other Value Added Tax adjustments + reference: '1205010.15' + financial_account_id: null + - id: '492272802100937839' + administration_id: 123 + name: Crediteuren + account_type: current_liabilities + account_id: '16011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchCreHac + name: Handelscrediteuren nominaal + name_english: Trade creditors nominal + reference: '1203010' + financial_account_id: null + - id: '492272802100937840' + administration_id: 123 + name: Debiteuren + account_type: current_assets + account_id: '13011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorDebHad + name: Handelsdebiteuren nominaal + name_english: Trade debtors nominal + reference: '1101010' + financial_account_id: null + - id: '492272802100937843' + administration_id: 123 + name: Financiële rekeningen + account_type: current_assets + account_id: '10510.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.816Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802100937851' + administration_id: 123 + name: Huisvestingskosten + account_type: expenses + account_id: '45185' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedHuiOhv + name: Overige huisvestingskosten + name_english: Other accommodation expenses + reference: '4201270' + financial_account_id: null + - id: '492272802100937841' + administration_id: 123 + name: Hulprekeningen + account_type: current_assets + account_id: '13850.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.861Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802100937842' + administration_id: 123 + name: Koersverschillen + account_type: other_income_expenses + account_id: '84601' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WFbeWisWis + name: Valutakoersverschillen + name_english: Currency exchange differences + reference: '8407010' + financial_account_id: null + - id: '492272802140783742' + administration_id: 123 + name: Kruisposten + account_type: current_assets + account_id: '10510.02' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.832Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832327' + administration_id: 123 + name: Nog te betalen kosten + account_type: current_liabilities + account_id: '17201' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaNtb + name: Nog te betalen andere kosten + name_english: Other payable expenses + reference: '1210020' + financial_account_id: null + - id: '492272802141832328' + administration_id: 123 + name: Nog te factureren omzet + account_type: current_assets + account_id: '14305' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaNtf + name: Nog te factureren of nog te verzenden facturen + name_english: Invoices not yet billed or sent + reference: '1104030' + financial_account_id: null + - id: '492272802100937852' + administration_id: 123 + name: Omzet + account_type: revenue + account_id: '81180.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.900Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937850' + administration_id: 123 + name: Ongecategoriseerde inkomsten + account_type: revenue + account_id: '81180.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.901Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937849' + administration_id: 123 + name: Ongecategoriseerde uitgaven + account_type: expenses + account_id: '46801.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.896Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802100937846' + administration_id: 123 + name: Overige schulden + account_type: current_liabilities + account_id: '16525' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOvsOvs + name: Overige schulden + name_english: Other debts + reference: '1209150' + financial_account_id: null + - id: '492272802100937844' + administration_id: 123 + name: Overige vorderingen + account_type: current_assets + account_id: '13850.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.867Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802141832324' + administration_id: 123 + name: Te betalen btw + account_type: current_liabilities + account_id: '16221.03' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.887Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOlo + name: 1c. Omzetbelasting leveringen/diensten belast met overige tarieven, behalve 0% + name_english: 1c. Value Added Tax on supplies/services subject to other rates, except 0% + reference: '1205010.04' + financial_account_id: null + - id: '492272802141832322' + administration_id: 123 + name: Te rubriceren betalingen + account_type: current_liabilities + account_id: '10510.05' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.850Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832323' + administration_id: 123 + name: Te rubriceren ontvangen betalingen + account_type: current_assets + account_id: '10510.03' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.838Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832321' + administration_id: 123 + name: Te rubriceren transacties + account_type: current_assets + account_id: '10510.04' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.841Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832325' + administration_id: 123 + name: Te vorderen btw + account_type: current_liabilities + account_id: '16221.04' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.891Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwVoo + name: 5b. Voorbelasting + name_english: 5a. Input VAT + reference: '1205010.09' + financial_account_id: null + - id: '492272802100937847' + administration_id: 123 + name: Verkoopkosten + account_type: expenses + account_id: '45680' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedVkkOvr + name: Overige verkoopkosten + name_english: Other sales costs + reference: '4203220' + financial_account_id: null + - id: '492272802141832326' + administration_id: 123 + name: Verrekeningen + account_type: current_assets + account_id: '14510' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorTusTbt + name: Tussenrekeningen betalingen + name_english: Transitory account payments + reference: '1105100' + financial_account_id: null + - id: '492272802100937853' + administration_id: 123 + name: Vervoerskosten + account_type: expenses + account_id: '45875' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedTraOtr + name: Overige transportkosten + name_english: Other transportation costs + reference: '4205170' + financial_account_id: null + - id: '492272802141832319' + administration_id: 123 + name: Vooruitgefactureerde kosten + account_type: current_assets + account_id: '14101' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaVof + name: Vooruitbetaalde facturen + name_english: Prepaid invoices + reference: '1104010' + financial_account_id: null + - id: '492272802141832320' + administration_id: 123 + name: Vooruitgefactureerde omzet + account_type: current_liabilities + account_id: '17250' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaVgo + name: Vooruitgefactureerde omzet + name_english: Pre-invoiced revenue + reference: '1210260' + financial_account_id: null + CanRequestTheLedgerAccountsIfTheUserHasPermissionForDocuments: + summary: Can request the ledger accounts if the user has permission for documents + value: + - id: '492272802100937845' + administration_id: 123 + name: Algemene kosten + account_type: expenses + account_id: '46801.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.895Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802141832329' + administration_id: 123 + name: Betaalde en/of ontvangen btw + account_type: current_liabilities + account_id: '16221.01' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.878Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwAfo + name: Afgedragen omzetbelasting + name_english: Remitted Value Added Tax + reference: '1205010.13' + financial_account_id: null + - id: '492272802100937848' + administration_id: 123 + name: Btw + account_type: current_liabilities + account_id: '16221.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.883Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOvm + name: Overige mutaties omzetbelasting + name_english: Other Value Added Tax adjustments + reference: '1205010.15' + financial_account_id: null + - id: '492272802100937839' + administration_id: 123 + name: Crediteuren + account_type: current_liabilities + account_id: '16011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchCreHac + name: Handelscrediteuren nominaal + name_english: Trade creditors nominal + reference: '1203010' + financial_account_id: null + - id: '492272802100937840' + administration_id: 123 + name: Debiteuren + account_type: current_assets + account_id: '13011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorDebHad + name: Handelsdebiteuren nominaal + name_english: Trade debtors nominal + reference: '1101010' + financial_account_id: null + - id: '492272802100937843' + administration_id: 123 + name: Financiële rekeningen + account_type: current_assets + account_id: '10510.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.816Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802100937851' + administration_id: 123 + name: Huisvestingskosten + account_type: expenses + account_id: '45185' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedHuiOhv + name: Overige huisvestingskosten + name_english: Other accommodation expenses + reference: '4201270' + financial_account_id: null + - id: '492272802100937841' + administration_id: 123 + name: Hulprekeningen + account_type: current_assets + account_id: '13850.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.861Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802100937842' + administration_id: 123 + name: Koersverschillen + account_type: other_income_expenses + account_id: '84601' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WFbeWisWis + name: Valutakoersverschillen + name_english: Currency exchange differences + reference: '8407010' + financial_account_id: null + - id: '492272802140783742' + administration_id: 123 + name: Kruisposten + account_type: current_assets + account_id: '10510.02' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.832Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832327' + administration_id: 123 + name: Nog te betalen kosten + account_type: current_liabilities + account_id: '17201' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaNtb + name: Nog te betalen andere kosten + name_english: Other payable expenses + reference: '1210020' + financial_account_id: null + - id: '492272802141832328' + administration_id: 123 + name: Nog te factureren omzet + account_type: current_assets + account_id: '14305' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaNtf + name: Nog te factureren of nog te verzenden facturen + name_english: Invoices not yet billed or sent + reference: '1104030' + financial_account_id: null + - id: '492272802100937852' + administration_id: 123 + name: Omzet + account_type: revenue + account_id: '81180.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.900Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937850' + administration_id: 123 + name: Ongecategoriseerde inkomsten + account_type: revenue + account_id: '81180.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.901Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937849' + administration_id: 123 + name: Ongecategoriseerde uitgaven + account_type: expenses + account_id: '46801.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.896Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802100937846' + administration_id: 123 + name: Overige schulden + account_type: current_liabilities + account_id: '16525' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOvsOvs + name: Overige schulden + name_english: Other debts + reference: '1209150' + financial_account_id: null + - id: '492272802100937844' + administration_id: 123 + name: Overige vorderingen + account_type: current_assets + account_id: '13850.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.867Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802141832324' + administration_id: 123 + name: Te betalen btw + account_type: current_liabilities + account_id: '16221.03' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.887Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOlo + name: 1c. Omzetbelasting leveringen/diensten belast met overige tarieven, behalve 0% + name_english: 1c. Value Added Tax on supplies/services subject to other rates, except 0% + reference: '1205010.04' + financial_account_id: null + - id: '492272802141832322' + administration_id: 123 + name: Te rubriceren betalingen + account_type: current_liabilities + account_id: '10510.05' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.850Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832323' + administration_id: 123 + name: Te rubriceren ontvangen betalingen + account_type: current_assets + account_id: '10510.03' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.838Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832321' + administration_id: 123 + name: Te rubriceren transacties + account_type: current_assets + account_id: '10510.04' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.841Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832325' + administration_id: 123 + name: Te vorderen btw + account_type: current_liabilities + account_id: '16221.04' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.891Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwVoo + name: 5b. Voorbelasting + name_english: 5a. Input VAT + reference: '1205010.09' + financial_account_id: null + - id: '492272802100937847' + administration_id: 123 + name: Verkoopkosten + account_type: expenses + account_id: '45680' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedVkkOvr + name: Overige verkoopkosten + name_english: Other sales costs + reference: '4203220' + financial_account_id: null + - id: '492272802141832326' + administration_id: 123 + name: Verrekeningen + account_type: current_assets + account_id: '14510' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorTusTbt + name: Tussenrekeningen betalingen + name_english: Transitory account payments + reference: '1105100' + financial_account_id: null + - id: '492272802100937853' + administration_id: 123 + name: Vervoerskosten + account_type: expenses + account_id: '45875' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedTraOtr + name: Overige transportkosten + name_english: Other transportation costs + reference: '4205170' + financial_account_id: null + - id: '492272802141832319' + administration_id: 123 + name: Vooruitgefactureerde kosten + account_type: current_assets + account_id: '14101' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaVof + name: Vooruitbetaalde facturen + name_english: Prepaid invoices + reference: '1104010' + financial_account_id: null + - id: '492272802141832320' + administration_id: 123 + name: Vooruitgefactureerde omzet + account_type: current_liabilities + account_id: '17250' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaVgo + name: Vooruitgefactureerde omzet + name_english: Pre-invoiced revenue + reference: '1210260' + financial_account_id: null + CanRequestTheLedgerAccountsIfTheUserHasPermissionForSettings: + summary: Can request the ledger accounts if the user has permission for settings + value: + - id: '492272802100937845' + administration_id: 123 + name: Algemene kosten + account_type: expenses + account_id: '46801.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.895Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802141832329' + administration_id: 123 + name: Betaalde en/of ontvangen btw + account_type: current_liabilities + account_id: '16221.01' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.878Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwAfo + name: Afgedragen omzetbelasting + name_english: Remitted Value Added Tax + reference: '1205010.13' + financial_account_id: null + - id: '492272802100937848' + administration_id: 123 + name: Btw + account_type: current_liabilities + account_id: '16221.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.883Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOvm + name: Overige mutaties omzetbelasting + name_english: Other Value Added Tax adjustments + reference: '1205010.15' + financial_account_id: null + - id: '492272802100937839' + administration_id: 123 + name: Crediteuren + account_type: current_liabilities + account_id: '16011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchCreHac + name: Handelscrediteuren nominaal + name_english: Trade creditors nominal + reference: '1203010' + financial_account_id: null + - id: '492272802100937840' + administration_id: 123 + name: Debiteuren + account_type: current_assets + account_id: '13011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorDebHad + name: Handelsdebiteuren nominaal + name_english: Trade debtors nominal + reference: '1101010' + financial_account_id: null + - id: '492272802100937843' + administration_id: 123 + name: Financiële rekeningen + account_type: current_assets + account_id: '10510.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.816Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802100937851' + administration_id: 123 + name: Huisvestingskosten + account_type: expenses + account_id: '45185' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedHuiOhv + name: Overige huisvestingskosten + name_english: Other accommodation expenses + reference: '4201270' + financial_account_id: null + - id: '492272802100937841' + administration_id: 123 + name: Hulprekeningen + account_type: current_assets + account_id: '13850.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.861Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802100937842' + administration_id: 123 + name: Koersverschillen + account_type: other_income_expenses + account_id: '84601' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WFbeWisWis + name: Valutakoersverschillen + name_english: Currency exchange differences + reference: '8407010' + financial_account_id: null + - id: '492272802140783742' + administration_id: 123 + name: Kruisposten + account_type: current_assets + account_id: '10510.02' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.832Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832327' + administration_id: 123 + name: Nog te betalen kosten + account_type: current_liabilities + account_id: '17201' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaNtb + name: Nog te betalen andere kosten + name_english: Other payable expenses + reference: '1210020' + financial_account_id: null + - id: '492272802141832328' + administration_id: 123 + name: Nog te factureren omzet + account_type: current_assets + account_id: '14305' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaNtf + name: Nog te factureren of nog te verzenden facturen + name_english: Invoices not yet billed or sent + reference: '1104030' + financial_account_id: null + - id: '492272802100937852' + administration_id: 123 + name: Omzet + account_type: revenue + account_id: '81180.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.900Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937850' + administration_id: 123 + name: Ongecategoriseerde inkomsten + account_type: revenue + account_id: '81180.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.901Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937849' + administration_id: 123 + name: Ongecategoriseerde uitgaven + account_type: expenses + account_id: '46801.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.896Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802100937846' + administration_id: 123 + name: Overige schulden + account_type: current_liabilities + account_id: '16525' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOvsOvs + name: Overige schulden + name_english: Other debts + reference: '1209150' + financial_account_id: null + - id: '492272802100937844' + administration_id: 123 + name: Overige vorderingen + account_type: current_assets + account_id: '13850.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.867Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802141832324' + administration_id: 123 + name: Te betalen btw + account_type: current_liabilities + account_id: '16221.03' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.887Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOlo + name: 1c. Omzetbelasting leveringen/diensten belast met overige tarieven, behalve 0% + name_english: 1c. Value Added Tax on supplies/services subject to other rates, except 0% + reference: '1205010.04' + financial_account_id: null + - id: '492272802141832322' + administration_id: 123 + name: Te rubriceren betalingen + account_type: current_liabilities + account_id: '10510.05' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.850Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832323' + administration_id: 123 + name: Te rubriceren ontvangen betalingen + account_type: current_assets + account_id: '10510.03' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.838Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832321' + administration_id: 123 + name: Te rubriceren transacties + account_type: current_assets + account_id: '10510.04' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.841Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832325' + administration_id: 123 + name: Te vorderen btw + account_type: current_liabilities + account_id: '16221.04' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.891Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwVoo + name: 5b. Voorbelasting + name_english: 5a. Input VAT + reference: '1205010.09' + financial_account_id: null + - id: '492272802100937847' + administration_id: 123 + name: Verkoopkosten + account_type: expenses + account_id: '45680' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedVkkOvr + name: Overige verkoopkosten + name_english: Other sales costs + reference: '4203220' + financial_account_id: null + - id: '492272802141832326' + administration_id: 123 + name: Verrekeningen + account_type: current_assets + account_id: '14510' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorTusTbt + name: Tussenrekeningen betalingen + name_english: Transitory account payments + reference: '1105100' + financial_account_id: null + - id: '492272802100937853' + administration_id: 123 + name: Vervoerskosten + account_type: expenses + account_id: '45875' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedTraOtr + name: Overige transportkosten + name_english: Other transportation costs + reference: '4205170' + financial_account_id: null + - id: '492272802141832319' + administration_id: 123 + name: Vooruitgefactureerde kosten + account_type: current_assets + account_id: '14101' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaVof + name: Vooruitbetaalde facturen + name_english: Prepaid invoices + reference: '1104010' + financial_account_id: null + - id: '492272802141832320' + administration_id: 123 + name: Vooruitgefactureerde omzet + account_type: current_liabilities + account_id: '17250' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaVgo + name: Vooruitgefactureerde omzet + name_english: Pre-invoiced revenue + reference: '1210260' + financial_account_id: null + ReturnsAListOfLedgerAccounts: + summary: Returns a list of ledger accounts + value: + - id: '492272802100937845' + administration_id: 123 + name: Algemene kosten + account_type: expenses + account_id: '46801.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.895Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802141832329' + administration_id: 123 + name: Betaalde en/of ontvangen btw + account_type: current_liabilities + account_id: '16221.01' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.878Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwAfo + name: Afgedragen omzetbelasting + name_english: Remitted Value Added Tax + reference: '1205010.13' + financial_account_id: null + - id: '492272802100937848' + administration_id: 123 + name: Btw + account_type: current_liabilities + account_id: '16221.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.883Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOvm + name: Overige mutaties omzetbelasting + name_english: Other Value Added Tax adjustments + reference: '1205010.15' + financial_account_id: null + - id: '492272802100937839' + administration_id: 123 + name: Crediteuren + account_type: current_liabilities + account_id: '16011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchCreHac + name: Handelscrediteuren nominaal + name_english: Trade creditors nominal + reference: '1203010' + financial_account_id: null + - id: '492272802100937840' + administration_id: 123 + name: Debiteuren + account_type: current_assets + account_id: '13011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorDebHad + name: Handelsdebiteuren nominaal + name_english: Trade debtors nominal + reference: '1101010' + financial_account_id: null + - id: '492272802100937843' + administration_id: 123 + name: Financiële rekeningen + account_type: current_assets + account_id: '10510.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.816Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802100937851' + administration_id: 123 + name: Huisvestingskosten + account_type: expenses + account_id: '45185' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedHuiOhv + name: Overige huisvestingskosten + name_english: Other accommodation expenses + reference: '4201270' + financial_account_id: null + - id: '492272802100937841' + administration_id: 123 + name: Hulprekeningen + account_type: current_assets + account_id: '13850.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.861Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802100937842' + administration_id: 123 + name: Koersverschillen + account_type: other_income_expenses + account_id: '84601' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WFbeWisWis + name: Valutakoersverschillen + name_english: Currency exchange differences + reference: '8407010' + financial_account_id: null + - id: '492272802140783742' + administration_id: 123 + name: Kruisposten + account_type: current_assets + account_id: '10510.02' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.832Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832327' + administration_id: 123 + name: Nog te betalen kosten + account_type: current_liabilities + account_id: '17201' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaNtb + name: Nog te betalen andere kosten + name_english: Other payable expenses + reference: '1210020' + financial_account_id: null + - id: '492272802141832328' + administration_id: 123 + name: Nog te factureren omzet + account_type: current_assets + account_id: '14305' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaNtf + name: Nog te factureren of nog te verzenden facturen + name_english: Invoices not yet billed or sent + reference: '1104030' + financial_account_id: null + - id: '492272802100937852' + administration_id: 123 + name: Omzet + account_type: revenue + account_id: '81180.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.900Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937850' + administration_id: 123 + name: Ongecategoriseerde inkomsten + account_type: revenue + account_id: '81180.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.901Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937849' + administration_id: 123 + name: Ongecategoriseerde uitgaven + account_type: expenses + account_id: '46801.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.896Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802100937846' + administration_id: 123 + name: Overige schulden + account_type: current_liabilities + account_id: '16525' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOvsOvs + name: Overige schulden + name_english: Other debts + reference: '1209150' + financial_account_id: null + - id: '492272802100937844' + administration_id: 123 + name: Overige vorderingen + account_type: current_assets + account_id: '13850.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.867Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802141832324' + administration_id: 123 + name: Te betalen btw + account_type: current_liabilities + account_id: '16221.03' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.887Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOlo + name: 1c. Omzetbelasting leveringen/diensten belast met overige tarieven, behalve 0% + name_english: 1c. Value Added Tax on supplies/services subject to other rates, except 0% + reference: '1205010.04' + financial_account_id: null + - id: '492272802141832322' + administration_id: 123 + name: Te rubriceren betalingen + account_type: current_liabilities + account_id: '10510.05' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.850Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832323' + administration_id: 123 + name: Te rubriceren ontvangen betalingen + account_type: current_assets + account_id: '10510.03' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.838Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832321' + administration_id: 123 + name: Te rubriceren transacties + account_type: current_assets + account_id: '10510.04' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.841Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832325' + administration_id: 123 + name: Te vorderen btw + account_type: current_liabilities + account_id: '16221.04' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.891Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwVoo + name: 5b. Voorbelasting + name_english: 5a. Input VAT + reference: '1205010.09' + financial_account_id: null + - id: '492272802100937847' + administration_id: 123 + name: Verkoopkosten + account_type: expenses + account_id: '45680' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedVkkOvr + name: Overige verkoopkosten + name_english: Other sales costs + reference: '4203220' + financial_account_id: null + - id: '492272802141832326' + administration_id: 123 + name: Verrekeningen + account_type: current_assets + account_id: '14510' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorTusTbt + name: Tussenrekeningen betalingen + name_english: Transitory account payments + reference: '1105100' + financial_account_id: null + - id: '492272802100937853' + administration_id: 123 + name: Vervoerskosten + account_type: expenses + account_id: '45875' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedTraOtr + name: Overige transportkosten + name_english: Other transportation costs + reference: '4205170' + financial_account_id: null + - id: '492272802141832319' + administration_id: 123 + name: Vooruitgefactureerde kosten + account_type: current_assets + account_id: '14101' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaVof + name: Vooruitbetaalde facturen + name_english: Prepaid invoices + reference: '1104010' + financial_account_id: null + - id: '492272802141832320' + administration_id: 123 + name: Vooruitgefactureerde omzet + account_type: current_liabilities + account_id: '17250' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaVgo + name: Vooruitgefactureerde omzet + name_english: Pre-invoiced revenue + reference: '1210260' + financial_account_id: null + CanRequestTheLedgerAccountsIfTheUserHasPermissionForEstimates: + summary: Can request the ledger accounts if the user has permission for estimates + value: + - id: '492272802100937845' + administration_id: 123 + name: Algemene kosten + account_type: expenses + account_id: '46801.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.895Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802141832329' + administration_id: 123 + name: Betaalde en/of ontvangen btw + account_type: current_liabilities + account_id: '16221.01' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.878Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwAfo + name: Afgedragen omzetbelasting + name_english: Remitted Value Added Tax + reference: '1205010.13' + financial_account_id: null + - id: '492272802100937848' + administration_id: 123 + name: Btw + account_type: current_liabilities + account_id: '16221.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.883Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOvm + name: Overige mutaties omzetbelasting + name_english: Other Value Added Tax adjustments + reference: '1205010.15' + financial_account_id: null + - id: '492272802100937839' + administration_id: 123 + name: Crediteuren + account_type: current_liabilities + account_id: '16011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchCreHac + name: Handelscrediteuren nominaal + name_english: Trade creditors nominal + reference: '1203010' + financial_account_id: null + - id: '492272802100937840' + administration_id: 123 + name: Debiteuren + account_type: current_assets + account_id: '13011' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorDebHad + name: Handelsdebiteuren nominaal + name_english: Trade debtors nominal + reference: '1101010' + financial_account_id: null + - id: '492272802100937843' + administration_id: 123 + name: Financiële rekeningen + account_type: current_assets + account_id: '10510.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.816Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802100937851' + administration_id: 123 + name: Huisvestingskosten + account_type: expenses + account_id: '45185' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedHuiOhv + name: Overige huisvestingskosten + name_english: Other accommodation expenses + reference: '4201270' + financial_account_id: null + - id: '492272802100937841' + administration_id: 123 + name: Hulprekeningen + account_type: current_assets + account_id: '13850.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.861Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802100937842' + administration_id: 123 + name: Koersverschillen + account_type: other_income_expenses + account_id: '84601' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WFbeWisWis + name: Valutakoersverschillen + name_english: Currency exchange differences + reference: '8407010' + financial_account_id: null + - id: '492272802140783742' + administration_id: 123 + name: Kruisposten + account_type: current_assets + account_id: '10510.02' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.832Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832327' + administration_id: 123 + name: Nog te betalen kosten + account_type: current_liabilities + account_id: '17201' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaNtb + name: Nog te betalen andere kosten + name_english: Other payable expenses + reference: '1210020' + financial_account_id: null + - id: '492272802141832328' + administration_id: 123 + name: Nog te factureren omzet + account_type: current_assets + account_id: '14305' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaNtf + name: Nog te factureren of nog te verzenden facturen + name_english: Invoices not yet billed or sent + reference: '1104030' + financial_account_id: null + - id: '492272802100937852' + administration_id: 123 + name: Omzet + account_type: revenue + account_id: '81180.01' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.900Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937850' + administration_id: 123 + name: Ongecategoriseerde inkomsten + account_type: revenue + account_id: '81180.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.901Z' + allowed_document_types: + - sales_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzNooNdo + name: Opbrengsten uit overige bronnen + name_english: Revenue from other sources + reference: '8004040' + financial_account_id: null + - id: '492272802100937849' + administration_id: 123 + name: Ongecategoriseerde uitgaven + account_type: expenses + account_id: '46801.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.896Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedAlkOal + name: Algemene kosten + name_english: General expenses + reference: '4215010' + financial_account_id: null + - id: '492272802100937846' + administration_id: 123 + name: Overige schulden + account_type: current_liabilities + account_id: '16525' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOvsOvs + name: Overige schulden + name_english: Other debts + reference: '1209150' + financial_account_id: null + - id: '492272802100937844' + administration_id: 123 + name: Overige vorderingen + account_type: current_assets + account_id: '13850.02' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.867Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvrOvk + name: Overige vorderingen + name_english: Other receivables + reference: '1103190' + financial_account_id: null + - id: '492272802141832324' + administration_id: 123 + name: Te betalen btw + account_type: current_liabilities + account_id: '16221.03' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.887Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwOlo + name: 1c. Omzetbelasting leveringen/diensten belast met overige tarieven, behalve 0% + name_english: 1c. Value Added Tax on supplies/services subject to other rates, except 0% + reference: '1205010.04' + financial_account_id: null + - id: '492272802141832322' + administration_id: 123 + name: Te rubriceren betalingen + account_type: current_liabilities + account_id: '10510.05' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.850Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832323' + administration_id: 123 + name: Te rubriceren ontvangen betalingen + account_type: current_assets + account_id: '10510.03' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.838Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832321' + administration_id: 123 + name: Te rubriceren transacties + account_type: current_assets + account_id: '10510.04' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.841Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BLimKruSto + name: Stortingen onderweg + name_english: Deposits in transit + reference: '1003010' + financial_account_id: null + - id: '492272802141832325' + administration_id: 123 + name: Te vorderen btw + account_type: current_liabilities + account_id: '16221.04' + parent_id: '492272802100937848' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.891Z' + allowed_document_types: + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchBepBtwVoo + name: 5b. Voorbelasting + name_english: 5a. Input VAT + reference: '1205010.09' + financial_account_id: null + - id: '492272802100937847' + administration_id: 123 + name: Verkoopkosten + account_type: expenses + account_id: '45680' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedVkkOvr + name: Overige verkoopkosten + name_english: Other sales costs + reference: '4203220' + financial_account_id: null + - id: '492272802141832326' + administration_id: 123 + name: Verrekeningen + account_type: current_assets + account_id: '14510' + parent_id: '492272802100937841' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorTusTbt + name: Tussenrekeningen betalingen + name_english: Transitory account payments + reference: '1105100' + financial_account_id: null + - id: '492272802100937853' + administration_id: 123 + name: Vervoerskosten + account_type: expenses + account_id: '45875' + parent_id: null + active: true + created_at: '2026-07-10T12:52:29.649Z' + updated_at: '2026-07-10T12:52:29.649Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WBedTraOtr + name: Overige transportkosten + name_english: Other transportation costs + reference: '4205170' + financial_account_id: null + - id: '492272802141832319' + administration_id: 123 + name: Vooruitgefactureerde kosten + account_type: current_assets + account_id: '14101' + parent_id: '492272802100937844' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BVorOvaVof + name: Vooruitbetaalde facturen + name_english: Prepaid invoices + reference: '1104010' + financial_account_id: null + - id: '492272802141832320' + administration_id: 123 + name: Vooruitgefactureerde omzet + account_type: current_liabilities + account_id: '17250' + parent_id: '492272802100937846' + active: true + created_at: '2026-07-10T12:52:29.757Z' + updated_at: '2026-07-10T12:52:29.757Z' + allowed_document_types: + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: BSchOpaVgo + name: Vooruitgefactureerde omzet + name_english: Pre-invoiced revenue + reference: '1210260' + financial_account_id: null + operationId: get_administration_id_ledger_accounts + post: + summary: Creates a new ledger account + description: |- + The `account_type` determines the kind of ledger account, this can be any of the following values: + `non_current_assets`, `current_assets`, `equity`, `provisions`, `non_current_liabilities`, `current_liabilities`, `revenue`, `direct_costs`, `expenses`, `other_income_expenses` + + By providing the `parent_id`, it is possible to create a tree of ledger accounts. Make sure the `account_types` + of the parent and child equal. + + ### Required scope(s) + `settings` + tags: + - Ledger accounts + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ledger_account: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: Should be unique for this combination of administration and account type. + account_type: + type: string + enum: + - non_current_assets + - current_assets + - equity + - provisions + - non_current_liabilities + - current_liabilities + - revenue + - direct_costs + - expenses + - other_income_expenses + account_id: + $ref: '#/components/schemas/identifier' + description: Optional field, also known as general ledger code. Should be unique. + parent_id: + $ref: '#/components/schemas/identifier' + description: Id of the parent ledger account. Should be a valid ledger account id. + allowed_document_types: + type: string + enum: + - sales_invoice + - purchase_invoice + - general_journal_document + - financial_mutation + - payment + description: Restricts the document types this ledger account can be used on. Defaults to a set derived from the `account_type`. + description: + type: string + required: + - name + - account_type + rgs_code: + type: string + description: Existing RGS version 3.5 code, e.g. 'WMfoBelMfo' + required: + - rgs_code + examples: + CreatesANewLedgerAccountWithTaxonomyItemByProvidingAnExistingRgsCode: + summary: Creates a new ledger account with taxonomy item by providing an existing rgs code + value: + rgs_code: WOmzAovEie + ledger_account: + name: Test ledger account + account_type: expenses + account_id: 2182 + CreatesANewLedgerAccount: + summary: Creates a new ledger account + value: + ledger_account: + name: Test ledger account + account_type: expenses + account_id: 2182 + rgs_code: WAfsAmv + responses: + '201': + description: Ledger account created + content: + application/json: + schema: + $ref: '#/components/schemas/ledger_account_response' + examples: + CreatesANewLedgerAccountWithTaxonomyItemByProvidingAnExistingRgsCode: + summary: Creates a new ledger account with taxonomy item by providing an existing rgs code + value: + id: '492273011644171613' + administration_id: 123 + name: Test ledger account + account_type: expenses + account_id: '2182' + parent_id: null + active: true + created_at: '2026-07-10T12:55:49.585Z' + updated_at: '2026-07-10T12:55:49.585Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WOmzAovEie + name: Eiergeld + name_english: Egg money + reference: '8008040' + financial_account_id: null + CreatesANewLedgerAccount: + summary: Creates a new ledger account + value: + id: '492273011684017503' + administration_id: 123 + name: Test ledger account + account_type: expenses + account_id: '2182' + parent_id: null + active: true + created_at: '2026-07-10T12:55:49.623Z' + updated_at: '2026-07-10T12:55:49.623Z' + allowed_document_types: + - purchase_invoice + - financial_mutation + - general_journal_document + taxonomy_item: + taxonomy_version: '3.5' + code: WAfsAmv + name: Afschrijvingen op materiële vaste activa + name_english: Depreciation of tangible fixed assets + reference: '4102000' + financial_account_id: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenNameIsNotProvided: + summary: Returns an error when name is not provided + value: + error: Name is required + symbolic: + ledger_account: + name: required + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenProvidedRgsCodeDoesNotBelongToATaxonomyItemOfVersion35: + summary: Returns error when provided rgs code does not belong to a taxonomy item of version 3.5 + value: + error: Given RGS code does not belong to a taxonomy item of version 3.5 + symbolic: + rgs_code: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsAnErrorWhenAnEmptyNameIsProvided: + summary: Returns an error when an empty name is provided + value: + error: + name: + - can't be blank + details: + name: + - error: blank + operationId: post_administration_id_ledger_accounts + /{administration_id}/payments/{id}{format}: + get: + summary: Returns information about a payment + description: Returns information about a payment. + tags: + - Payments + security: + - bearerAuth: [] + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A payment + content: + application/json: + schema: + $ref: '#/components/schemas/payment_response' + examples: + ReturnsASinglePayment: + summary: Returns a single payment + value: + id: '492272963007022350' + administration_id: 123 + invoice_type: SalesInvoice + invoice_id: '492272962836104440' + financial_account_id: '492272962997585162' + user_id: 1 + payment_transaction_id: null + transaction_identifier: null + price: '363.0' + price_base: '363.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: '492272963002828045' + ledger_account_id: '492272962988147977' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:55:03.201Z' + updated_at: '2026-07-10T12:55:03.201Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenPaymentDoesNotExist: + summary: Returns 404 when payment does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_payments_id + /{administration_id}/products/identifier/{identifier}{format}: + get: + summary: Returns information about a product based on the identifier + description: |- + Finds the product by the identifier field of the product. + + ### Required scope(s) + `settings` + tags: + - Products + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: identifier + in: path + required: true + schema: + type: string + - $ref: '#/components/parameters/format' + responses: + '200': + description: A product + content: + application/json: + schema: + $ref: '#/components/schemas/product_response' + examples: + ReturnsASingleProductBasedOnTheIdentifierWithDot: + summary: Returns a single product based on the identifier with dot + value: + id: '492272869417420165' + administration_id: 123 + description: My product description + title: null + identifier: aa.bb + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:33.947Z' + updated_at: '2026-07-10T12:53:33.957Z' + ReturnsASingleProductBasedOnTheIdentifier: + summary: Returns a single product based on the identifier + value: + id: '492272869498160521' + administration_id: 123 + description: My product description + title: null + identifier: SKU1234 + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:34.024Z' + updated_at: '2026-07-10T12:53:34.024Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenProductDoesNotExist: + summary: Returns 404 when product does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_products_identifier_identifier + /{administration_id}/products/{id}/sales_link{format}: + post: + summary: Create online sales link + description: |- + This call generates an online sales link, and allows pre-setting the contact for a checkout page. The link is valid for one hour + + ### Required scope(s) + `settings` + tags: + - Products + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: contact_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + responses: + '201': + description: A sales link + content: + application/json: + schema: + type: string + examples: + CreatesAnOnlineSalesLinkIfNoContactIdIsProvided: + summary: Creates an online sales link if no contact id is provided + value: http://checkout.moneybird.dev/o/gGoEAEmvWey8 + CreatesAnOnlineSalesLink: + summary: Creates an online sales link + value: http://checkout.moneybird.dev/o/w2g0L0WxDL8p + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenProductDoesNotExist: + summary: Returns 404 when product does not exist + value: + error: 'Record not found for model name: Product' + Returns404IfContactIsNotFound: + summary: Returns 404 if contact is not found + value: + error: 'Record not found for model name: Contact' + Returns404WhenProductIsNotValidForOnlineSales: + summary: Returns 404 when product is not valid for online sales + value: + error: Product not valid for online sales + operationId: post_administration_id_products_id_sales_link + /{administration_id}/products/{id}{format}: + get: + summary: Returns information about a product + description: |- + Returns information about a product. + + ### Required scope(s) + `settings` + tags: + - Products + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A product + content: + application/json: + schema: + $ref: '#/components/schemas/product_response' + examples: + ReturnsASingleProduct: + summary: Returns a single product + value: + id: '492272870631671265' + administration_id: 123 + description: My product description + title: null + identifier: SKU1234 + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:35.105Z' + updated_at: '2026-07-10T12:53:35.105Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenProductDoesNotExist: + summary: Returns 404 when product does not exist + value: + error: 'Record not found for model name: Product' + operationId: get_administration_id_products_id + patch: + summary: Updates a product + description: |- + Updates a product. + + ### Required scope(s) + `settings` + tags: + - Products + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + product: + type: object + unevaluatedProperties: false + properties: + title: + type: string + description: The name of the product, displayed on invoices and estimates. + description: + type: string + description: A description of the product. Used as the default detail description when adding this product to a document. + checkout_description: + type: string + description: A description shown on the checkout page when selling this product online. + price: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + tax_rate_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid tax rate id. + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + frequency_type: + type: string + description: Can be `day`, `week`, `month`, `quarter` or `year`. + frequency: + type: integer + description: Should be an integer >= 1. + product_type: + type: string + description: Can be `digital_service`, `service` or `product`. + vat_rate_type: + type: string + description: Can be `standard` or `reduced`. + checkout_type: + type: string + description: Can be `product` or `subscription`. + max_amount_per_order: + type: integer + description: When `checkout_type` is `subscription`, should be an integer 0 <= *n* < 2. + document_style_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid document style id. + workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid workflow id. + identifier: + type: string + description: Should be unique for the administration. + frequency_preset: + type: string + description: A predefined billing interval label for subscription products, e.g. `monthly`, `quarterly`, `yearly`. + required: [] + required: [] + examples: + UpdatesAProduct: + summary: Updates a product + value: + product: + description: Updated + price: '123' + responses: + '200': + description: Product updated + content: + application/json: + schema: + $ref: '#/components/schemas/product_response' + examples: + UpdatesAProduct: + summary: Updates a product + value: + id: '492272870536250844' + administration_id: 123 + description: Updated + title: null + identifier: SKU1234 + price: '123.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:35.014Z' + updated_at: '2026-07-10T12:53:35.032Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfTheValidationsFail: + summary: Returns a 400 if the validations fail + value: + error: Product is required + symbolic: + product: required + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenProductDoesNotExist: + summary: Returns 404 when product does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheProductIsInvalid: + summary: Returns a 422 if the product is invalid + value: + error: + description: + - is too long (maximum is 4096 characters) + details: + description: + - error: too_long + count: 4096 + operationId: patch_administration_id_products_id + delete: + summary: Deletes a product + description: |- + Deletes a product if it has no dependencies. + If the product has associated details, subscription products, orders, or subscription templates, deletion is blocked and the product will be deactivated instead. + If the product has active subscriptions or subscription templates, deactivation is blocked and an error is returned. + + ### Required scope(s) + `settings` + tags: + - Products + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Product deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenProductDoesNotExist: + summary: Returns 404 when product does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422ResponseWhenProductHasAnSubscriptionProductInTheFuture: + summary: Returns a 422 response when product has an subscription product in the future + value: + error: Product cannot be destroyed or deactivated + ReturnsAnErrorWhenProductHasAnActiveSubscriptionProduct: + summary: Returns an error when product has an active subscription product + value: + error: Product cannot be destroyed or deactivated + operationId: delete_administration_id_products_id + /{administration_id}/products{format}: + get: + summary: List all products of an administration + description: |- + Returns a paginated list of products in the administration. Each page contains 10 products. You can use the `page` parameter to fetch the next page of products. + + ### Required scope(s) + `settings` + tags: + - Products + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: query + in: query + required: false + schema: + type: string + description: Allows filtering by product name. + examples: + HandlesEmptySearchResult: + summary: Handles empty search result + value: kjashdfjksadhfjk + AllowsFilteringByQuery: + summary: Allows filtering by query + value: apple + - $ref: '#/components/parameters/page' + description: The page to fetch, starting at 1. + - $ref: '#/components/parameters/per_page' + - name: currency + in: query + required: false + schema: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + - name: active + in: query + required: false + schema: + type: + - boolean + - string + default: true + description: When true, only active products are returned. Set to false to include deactivated products. + - name: for_checkout + in: query + required: false + schema: + type: + - boolean + - string + description: When true, returns only products with online checkout enabled. When false, returns only products without checkout. Omit to include both. + - name: ledger_account_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + description: Filters products by their associated ledger account. + responses: + '200': + description: A list of products + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/product_response' + examples: + ReturnsAPaginatedResponseForPage2: + summary: Returns a paginated response for page 2 + value: + - id: '492272870738626023' + administration_id: 123 + description: My product description + title: null + identifier: SKU1234 + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:35.208Z' + updated_at: '2026-07-10T12:53:35.208Z' + ReturnsAListOfActiveProducts: + summary: Returns a list of active products + value: + - id: '492272871090947595' + administration_id: 123 + description: Apple + title: null + identifier: null + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:35.543Z' + updated_at: '2026-07-10T12:53:35.543Z' + - id: '492272871077316105' + administration_id: 123 + description: My product description + title: null + identifier: SKU1234 + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:35.531Z' + updated_at: '2026-07-10T12:53:35.531Z' + - id: '492272871103530509' + administration_id: 123 + description: Pie + title: null + identifier: null + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:35.556Z' + updated_at: '2026-07-10T12:53:35.556Z' + HandlesEmptySearchResult: + summary: Handles empty search result + value: [] + AllowsFilteringByQuery: + summary: Allows filtering by query + value: + - id: '492272872682686014' + administration_id: 123 + description: Apple + title: null + identifier: null + price: '100.0' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:53:37.061Z' + updated_at: '2026-07-10T12:53:37.061Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfPageParamIsInvalid: + summary: Returns a 400 if page param is invalid + value: + error: Page is too small + symbolic: + page: min + ReturnsA400IfTheRequestIsInvalid: + summary: Returns a 400 if the request is invalid + value: + error: per_page does not have a valid value + operationId: get_administration_id_products + post: + summary: Creates a new product + description: |- + Creates a new product. + + ### Required scope(s) + `settings` + tags: + - Products + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + product: + type: object + unevaluatedProperties: false + properties: + title: + type: string + description: The name of the product, displayed on invoices and estimates. + description: + type: string + description: A description of the product. Used as the default detail description when adding this product to a document. + checkout_description: + type: string + description: A description shown on the checkout page when selling this product online via Moneybird checkout. + price: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + document_style_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid document style id. + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + tax_rate_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid tax rate id. + workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid workflow id. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + checkout_type: + type: string + description: Can be `product` or `subscription`. + frequency_type: + type: string + description: Can be `day`, `week`, `month`, `quarter` or `year`. + frequency: + type: integer + description: Should be an integer >= 1. + product_type: + type: string + description: Can be `digital_service`, `service` or `product`. + vat_rate_type: + type: string + description: Can be `standard` or `reduced`. + max_amount_per_order: + type: integer + description: When `checkout_type` is `subscription`, should be an integer 0 <= *n* < 2. + identifier: + type: string + description: Should be unique for the administration. + frequency_preset: + type: string + description: A predefined billing interval label for subscription products, e.g. `monthly`, `quarterly`, `yearly`. + required: + - price + - ledger_account_id + required: [] + examples: + CreatesANewProduct: + summary: Creates a new product + value: + product: + description: Geldvogel + price: 50,50 + tax_rate_id: 492272870390498750 + ledger_account_id: 492272870402033100 + responses: + '201': + description: Product created + content: + application/json: + schema: + $ref: '#/components/schemas/product_response' + examples: + CreatesANewProduct: + summary: Creates a new product + value: + id: '492272870419858902' + administration_id: 123 + description: Geldvogel + title: null + identifier: null + price: '50.5' + currency: EUR + frequency: null + frequency_type: null + tax_rate_id: '492272870390498770' + ledger_account_id: '492272870402033108' + created_at: '2026-07-10T12:53:34.903Z' + updated_at: '2026-07-10T12:53:34.903Z' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsAnErrorWhenInformationIsMissing: + summary: Returns an error when information is missing + value: + error: + title: + - can't be blank + description: + - can't be blank + base: + - must contain a title or description + details: + title: + - error: blank + description: + - error: blank + base: + - error: must_have_a_title_or_description + operationId: post_administration_id_products + /{administration_id}/projects/{id}{format}: + get: + summary: Returns information about a project + description: |- + Returns information about a project. + + ### Required scope(s) + `settings` + tags: + - Projects + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A project + content: + application/json: + schema: + $ref: '#/components/schemas/project_response' + examples: + ReturnsASingleProject: + summary: Returns a single project + value: + id: '492273017300191121' + name: Project 1 + state: active + budget: 10 + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenProjectDoesNotExist: + summary: Returns 404 when project does not exist + value: + error: 'Record not found for model name: Project' + operationId: get_administration_id_projects_id + patch: + summary: Updates a project + description: |- + Updates a project. Requires permission to settings. Requires a unique name within the administration (if name is provided). + + ### Required scope(s) + `settings` + tags: + - Projects + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + project: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: Should be unique for the administration. + budget: + $ref: '#/components/schemas/number' + description: The budget for this project in hours. + required: + - name + required: [] + examples: + UpdatesAProject: + summary: Updates a project + value: + project: + name: Eagle + budget: 1000 + responses: + '200': + description: Project updated + content: + application/json: + schema: + $ref: '#/components/schemas/project_response' + examples: + UpdatesAProject: + summary: Updates a project + value: + id: '492273017195333514' + name: Eagle + state: active + budget: 1000 + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404WhenTheProjectDoesNotExist: + summary: Returns a 404 when the project does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422WhenTheProjectIsInvalid: + summary: Returns a 422 when the project is invalid + value: + error: + name: + - can't be blank + details: + name: + - error: blank + operationId: patch_administration_id_projects_id + delete: + summary: Deletes a project + description: |- + Deletes a project. When there are no linked entities (sales invoices, estimates, etc.) the project is deleted. When there are linked entities, the project gets the state `archived`. + + ### Required scope(s) + `settings` + tags: + - Projects + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Project deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404WhenTheProjectDoesNotExist: + summary: Returns a 404 when the project does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_projects_id + /{administration_id}/projects{format}: + get: + summary: List all projects of an administration + description: |- + Returns a paginated list of projects in the administration. Each page contains 25 projects. You can use the `page` parameter to fetch the next page of projects. It returns the active projects when no filter is applied. + + ### Required scope(s) + `settings` + tags: + - Projects + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + schema: + type: string + default: state:active + description: 'The filter, can be: state:all, state:archived or state:active' + examples: + ReturnsTheListOfFilteredArchivedProjects: + summary: Returns the list of filtered archived projects + value: state:archived + - $ref: '#/components/parameters/per_page' + description: 'Amount of projects per page, default: 25' + - $ref: '#/components/parameters/page' + description: The page to fetch, starting at 1. + responses: + '200': + description: A list of projects + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/project_response' + examples: + ReturnsTheListOfProjects: + summary: Returns the list of projects + value: + - id: '492273016828331884' + name: Project 1 + state: active + budget: 10 + ReturnsTheListOfFilteredArchivedProjects: + summary: Returns the list of filtered archived projects + value: + - id: '492273016871323504' + name: Project Blackbird + state: archived + budget: 10 + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfPageParamIsInvalid: + summary: Returns a 400 if page param is invalid + value: + error: Page is too small + symbolic: + page: min + operationId: get_administration_id_projects + post: + summary: Creates a new project + description: |- + Creates a new project. Requires a unique name within the administration. + + ### Required scope(s) + `settings` + tags: + - Projects + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + project: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: Should be unique for the administration. + budget: + $ref: '#/components/schemas/number' + description: The budget for this project in hours. Both a decimal and a string are accepted. + required: + - name + required: [] + examples: + CreatesANewProject: + summary: Creates a new project + value: + project: + name: Falcon + responses: + '201': + description: Project created + content: + application/json: + schema: + $ref: '#/components/schemas/project_response' + examples: + CreatesANewProject: + summary: Creates a new project + value: + id: '492273017109350276' + name: Falcon + state: active + budget: null + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsAnErrorWhenInformationIsMissing: + summary: Returns an error when information is missing + value: + error: + name: + - can't be blank + details: + name: + - error: blank + operationId: post_administration_id_projects + /{administration_id}/purchase_transactions/{id}/delete{format}: + delete: + summary: Delete a purchase transaction + description: |- + This endpoint is deprecated. Use the DELETE /purchase_transactions/{id} endpoint instead. Delete a purchase transaction. Requires that the purchase transaction is pending and doesn't belong to a purchase transaction batch. + + ### Required scope(s) + `bank` + deprecated: true + x-sunset: '2026-12-31' + tags: + - Purchase transactions + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Purchase transaction deleted + operationId: delete_administration_id_purchase_transactions_id_delete + /{administration_id}/purchase_transactions/{id}{format}: + get: + summary: Get a purchase transaction by id + description: |- + Get a purchase transaction by id. + + ### Required scope(s) + `bank` + tags: + - Purchase transactions + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A purchase transaction + content: + application/json: + schema: + $ref: '#/components/schemas/purchase_transaction_response' + examples: + ReturnsPurchaseTransactionWhenSuccessful: + summary: Returns purchase transaction when successful + value: + id: '492272963483075910' + administration_id: 123 + financial_account_id: '492272963476784452' + payment_instrument_id: null + state: open + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + source_sepa_iban: NL28INGB0000000001 + source_sepa_iban_account_name: ING NL28INGB0000000001 + date: '2026-07-10' + description: FOOBAR-1 + end_to_end_id: FOOBAR-1 + contact: + id: '492272963450570047' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: NL47TEST9876543210 + is_trusted: false + max_transfer_amount: null + attention: null + email: contact1@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: contact1@example.com + send_estimates_to_attention: null + send_estimates_to_email: null + direct_debit: false + sepa_active: false + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:55:03.624Z' + updated_at: '2026-07-10T12:55:03.624Z' + version: 1783688103 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + amount: '121.0' + created_at: '2026-07-10T12:55:03.655Z' + updated_at: '2026-07-10T12:55:03.655Z' + payable_type: Document + payable_id: '492272963466298690' + payment_method: null + ReturnsPurchaseTransactionWhenFinancialaccountIsNotABankaccount: + summary: Returns purchase transaction when financialaccount is not a bankaccount + value: + id: '492272963587933528' + administration_id: 123 + financial_account_id: '492272963557524816' + payment_instrument_id: null + state: open + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + source_sepa_iban: null + source_sepa_iban_account_name: null + date: '2026-07-10' + description: FOOBAR-2 + end_to_end_id: FOOBAR-2 + contact: + id: '492272963564864851' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: NL47TEST9876543210 + is_trusted: false + max_transfer_amount: null + attention: null + email: contact2@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: contact2@example.com + send_estimates_to_attention: null + send_estimates_to_email: null + direct_debit: false + sepa_active: false + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:55:03.733Z' + updated_at: '2026-07-10T12:55:03.733Z' + version: 1783688103 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + amount: '121.0' + created_at: '2026-07-10T12:55:03.755Z' + updated_at: '2026-07-10T12:55:03.755Z' + payable_type: Document + payable_id: '492272963579544918' + payment_method: null + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorsWhenAnErrorOccurred: + summary: Returns errors when an error occurred + value: + error: 'Record not found for model name: Purchase transaction' + operationId: get_administration_id_purchase_transactions_id + delete: + summary: Delete a purchase transaction + description: |- + Delete a purchase transaction. Requires that the purchase transaction is pending and doesn't belong to a purchase transaction batch. + + ### Required scope(s) + `bank` + tags: + - Purchase transactions + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Purchase transaction deleted + operationId: delete_administration_id_purchase_transactions_id + /{administration_id}/purchase_transactions{format}: + get: + summary: List all purchase transactions + description: |- + Returns a list of purchase transactions in the administration. + + ### Required scope(s) + `bank` + tags: + - Purchase transactions + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | --- | --- | --- | --- | + | state | `String` | `all` | `all`, `open`, `pending_payment`, `paid` or `cancelled` | + | period | `String` | `nil` | This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | + | unbatched | `Boolean` | `true` | `true` or `false` | + + You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:open|pending_payment`. + schema: + type: string + default: unbatched:true + examples: + ReturnsAllPurchaseTransactionsFilteredOnPeriod: + summary: Returns all purchase transactions filtered on period + value: period:this_month + DoesNotListPaidTransactions: + summary: Does not list paid transactions + value: state:pending_payment,unbatched:true,signable_by_user:true + ReturnsOnlyPurchaseTransactionsReadyToBeSigned: + summary: Returns only purchase transactions ready to be signed + value: state:awaiting_authorization,unbatched:true,signable_by_user:true + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of purchase transactions + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/purchase_transaction_response' + examples: + ReturnsAllPurchaseTransactionsOfAnAdministration: + summary: Returns all purchase transactions of an administration + value: + - id: '492272963660285281' + administration_id: 123 + financial_account_id: '492272963655042399' + payment_instrument_id: null + state: open + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + source_sepa_iban: NL28INGB0000000001 + source_sepa_iban_account_name: ING NL28INGB0000000001 + date: '2026-07-10' + description: FOOBAR-1 + end_to_end_id: FOOBAR-1 + contact: + id: '492272963626730842' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: NL47TEST9876543210 + is_trusted: false + max_transfer_amount: null + attention: null + email: contact1@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: contact1@example.com + send_estimates_to_attention: null + send_estimates_to_email: null + direct_debit: false + sepa_active: false + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:55:03.792Z' + updated_at: '2026-07-10T12:55:03.792Z' + version: 1783688103 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + amount: '121.0' + created_at: '2026-07-10T12:55:03.824Z' + updated_at: '2026-07-10T12:55:03.824Z' + payable_type: Document + payable_id: '492272963642459485' + payment_method: null + ReturnsAllPurchaseTransactionsFilteredOnPeriod: + summary: Returns all purchase transactions filtered on period + value: + - id: '492272963739977066' + administration_id: 123 + financial_account_id: '492272963733685608' + payment_instrument_id: null + state: open + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + source_sepa_iban: NL28INGB0000000001 + source_sepa_iban_account_name: ING NL28INGB0000000001 + date: '2026-07-10' + description: FOOBAR-1 + end_to_end_id: FOOBAR-1 + contact: + id: '492272963704325475' + administration_id: 123 + company_name: Relation 1 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: NL47TEST9876543210 + is_trusted: false + max_transfer_amount: null + attention: null + email: contact1@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: contact1@example.com + send_estimates_to_attention: null + send_estimates_to_email: null + direct_debit: false + sepa_active: false + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:55:03.866Z' + updated_at: '2026-07-10T12:55:03.866Z' + version: 1783688103 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + amount: '121.0' + created_at: '2026-07-10T12:55:03.900Z' + updated_at: '2026-07-10T12:55:03.900Z' + payable_type: Document + payable_id: '492272963721102694' + payment_method: null + DoesNotListPaidTransactions: + summary: Does not list paid transactions + value: [] + ReturnsOnlyPurchaseTransactionsReadyToBeSigned: + summary: Returns only purchase transactions ready to be signed + value: + - id: '492272964044064154' + administration_id: 123 + financial_account_id: '492272964034626967' + payment_instrument_id: null + state: awaiting_authorization + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + source_sepa_iban: NL35ADYB0000000001 + source_sepa_iban_account_name: Moneybird NL35ADYB0000000001 + date: '2026-07-10' + description: 2026-0003 + end_to_end_id: 2026-0003 + contact: + id: '492272964006315410' + administration_id: 123 + company_name: Relation 2 + firstname: null + lastname: null + address1: null + address2: null + zipcode: null + city: null + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: NL47TEST9876543210 + is_trusted: false + max_transfer_amount: null + attention: null + email: contact2@example.com + email_ubl: false + send_invoices_to_attention: null + send_invoices_to_email: contact2@example.com + send_estimates_to_attention: null + send_estimates_to_email: null + direct_debit: false + sepa_active: false + sepa_iban: NL47TEST9876543210 + sepa_iban_account_name: Test Inc. + sepa_bic: TESTNL22 + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:55:04.154Z' + updated_at: '2026-07-10T12:55:04.154Z' + version: 1783688104 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + amount: '121.0' + created_at: '2026-07-10T12:55:04.190Z' + updated_at: '2026-07-10T12:55:04.190Z' + payable_type: Document + payable_id: '492272964022044053' + payment_method: null + DoesNotListTransactions: + summary: Does not list transactions + value: [] + operationId: get_administration_id_purchase_transactions + /{administration_id}/recurring_sales_invoices/synchronization{format}: + get: + summary: List all IDs and versions + description: |- + Returns all recurring sales invoices in the administration. The list contains the invoice id and the version of the + recurring invoice. Check if the version of the recurring invoice is newer than the version you have stored locally, + use the `POST` variant for fetching recurring invoices with the given IDs. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /recurring_sales_invoices` — see that operation's description for the available keys. + schema: + type: string + examples: + RetrievesTheIdsForSynchronizationWithAFilter: + summary: Retrieves the ids for synchronization with a filter + value: frequency:month + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesTheIdsForSynchronizationWithAFilter: + summary: Retrieves the ids for synchronization with a filter + value: + - id: '492272813025003124' + version: 1783687960 + ReturnsUniqueIdsEvenWhenRecurringSalesInvoicesHaveMultipleAttachments: + summary: Returns unique ids even when recurring sales invoices have multiple attachments + value: + - id: '492272813193823873' + version: 1783687960 + RetrievesTheIdsForSynchronization: + summary: Retrieves the ids for synchronization + value: + - id: '492272813426607766' + version: 1783687960 + - id: '492272813375227536' + version: 1783687960 + operationId: get_administration_id_recurring_sales_invoices_synchronization + post: + summary: Fetch recurring sales invoices with given IDs + description: |- + Given a list of recurring sales invoice IDs, returns the details of the recurring invoices. + Returns a maximum of 100 recurring invoices, even if more IDs are provided. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesRecurringSalesInvoicesGivenByIds: + summary: Retrieves recurring sales invoices given by ids + value: + ids: + - 492272812564678200 + - 492272812605572740 + responses: + '200': + description: A list of recurring sales invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/recurring_sales_invoice_response' + examples: + RetrievesRecurringSalesInvoicesGivenByIds: + summary: Retrieves recurring sales invoices given by ids + value: + - id: '492272812605572704' + administration_id: 123 + contact_id: '492272812535318107' + contact: + id: '492272812535318107' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:39.700Z' + updated_at: '2026-07-10T12:52:39.700Z' + version: 1783687959 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: month + frequency: 1 + created_at: '2026-07-10T12:52:39.768Z' + updated_at: '2026-07-10T12:52:39.773Z' + version: 1783687959 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272812607669857' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:39.769Z' + updated_at: '2026-07-10T12:52:39.769Z' + - id: '492272812609767010' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:39.771Z' + updated_at: '2026-07-10T12:52:39.771Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:39.775Z' + updated_at: '2026-07-10T12:52:39.775Z' + subscription: null + - id: '492272812564678236' + administration_id: 123 + contact_id: '492272812535318107' + contact: + id: '492272812535318107' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:39.700Z' + updated_at: '2026-07-10T12:52:39.700Z' + version: 1783687959 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: year + frequency: 1 + created_at: '2026-07-10T12:52:39.728Z' + updated_at: '2026-07-10T12:52:39.734Z' + version: 1783687959 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272812566775389' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:39.730Z' + updated_at: '2026-07-10T12:52:39.730Z' + - id: '492272812568872542' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:39.732Z' + updated_at: '2026-07-10T12:52:39.732Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:39.736Z' + updated_at: '2026-07-10T12:52:39.736Z' + subscription: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenInvalidParametersAreProvided: + summary: Returns 400 when invalid parameters are provided + value: + error: Ids isn't an array + symbolic: + ids: array + operationId: post_administration_id_recurring_sales_invoices_synchronization + /{administration_id}/recurring_sales_invoices/{id}{format}: + get: + summary: Get a recurring sales invoice by id + description: |- + Get a recurring sales invoice by id. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A recurring sales invoice + content: + application/json: + schema: + $ref: '#/components/schemas/recurring_sales_invoice_response' + examples: + ReturnsInvoiceByGivenId: + summary: Returns invoice by given id + value: + id: '492272815656929077' + administration_id: 123 + contact_id: '492272815609743155' + contact: + id: '492272815609743155' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:42.629Z' + updated_at: '2026-07-10T12:52:42.629Z' + version: 1783687962 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: month + frequency: 1 + created_at: '2026-07-10T12:52:42.678Z' + updated_at: '2026-07-10T12:52:42.684Z' + version: 1783687962 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272815659026230' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:42.679Z' + updated_at: '2026-07-10T12:52:42.679Z' + - id: '492272815662171959' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:42.681Z' + updated_at: '2026-07-10T12:52:42.681Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:42.687Z' + updated_at: '2026-07-10T12:52:42.687Z' + subscription: null + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_recurring_sales_invoices_id + patch: + summary: Updates a recurring sales invoice + description: |- + Updates a recurring sales invoice. Only possible if the recurring sales invoice has no active subscription. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + recurring_sales_invoice: + type: object + unevaluatedProperties: false + properties: + document_style_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid document style id. + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + contact_person_id: + $ref: '#/components/schemas/identifier_nullable' + description: Should be a valid contact person id. + update_contact: + type: + - boolean + - string + description: When `true`, the contact's address and other details are refreshed from the current contact record each time a new invoice is generated. + reference: + type: string + description: A reference to include on each generated invoice, e.g. a contract or project code. + invoice_date: + type: string + description: Should be in the future. + workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid workflow id. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + first_due_interval: + type: integer + description: The number of days after the invoice date before each generated invoice is due. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on generated invoices are inclusive of tax. + discount: + $ref: '#/components/schemas/number' + description: Discount percentage, e.g. 10,0%. + frequency_type: + type: string + description: Can be `day`, `week`, `month`, `quarter` or `year`. + frequency: + type: string + description: The interval multiplier. Combined with `frequency_type` to determine the billing cycle. + has_desired_count: + type: + - boolean + - string + description: When `true`, the recurring invoice stops after `desired_count` invoices have been created. + desired_count: + type: string + description: The maximum number of invoices to generate. Only applied when `has_desired_count` is `true`. + auto_send: + type: + - boolean + - string + description: When `true`, each generated invoice is automatically sent to the contact. + mergeable: + type: + - boolean + - string + description: When `true`, generated invoices may be merged with other mergeable invoices for the same contact, if they share the same workflow, layout, currency, language and other invoice settings. + details_attributes: + $ref: '#/components/schemas/details_attributes' + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + required: [] + examples: + UpdatesTheRecurringSalesInvoice: + summary: Updates the recurring sales invoice + value: + recurring_sales_invoice: + reference: Reference changed + UpdatesARecurringSalesInvoiceDetail: + summary: Updates a recurring sales invoice detail + value: + recurring_sales_invoice: + details_attributes: + '0': + id: 492272816221063000 + price: 10 + responses: + '200': + description: Recurring sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/recurring_sales_invoice_response' + examples: + UpdatesTheRecurringSalesInvoice: + summary: Updates the recurring sales invoice + value: + id: '492272815907538755' + administration_id: 123 + contact_id: '492272815866644289' + contact: + id: '492272815866644289' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:42.877Z' + updated_at: '2026-07-10T12:52:42.877Z' + version: 1783687962 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Reference changed + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: month + frequency: 1 + created_at: '2026-07-10T12:52:42.916Z' + updated_at: '2026-07-10T12:52:42.962Z' + version: 1783687962 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272815909635908' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:42.918Z' + updated_at: '2026-07-10T12:52:42.918Z' + - id: '492272815911733061' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:42.920Z' + updated_at: '2026-07-10T12:52:42.920Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:42.924Z' + updated_at: '2026-07-10T12:52:42.924Z' + subscription: null + UpdatesARecurringSalesInvoiceDetail: + summary: Updates a recurring sales invoice detail + value: + id: '492272816218965841' + administration_id: 123 + contact_id: '492272816180168527' + contact: + id: '492272816180168527' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:43.176Z' + updated_at: '2026-07-10T12:52:43.176Z' + version: 1783687963 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: month + frequency: 1 + created_at: '2026-07-10T12:52:43.213Z' + updated_at: '2026-07-10T12:52:43.253Z' + version: 1783687963 + prices_are_incl_tax: false + total_price_excl_tax: '50.66' + total_price_excl_tax_base: '50.66' + total_price_incl_tax: '61.3' + total_price_incl_tax_base: '61.3' + details: + - id: '492272816221062994' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '10.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '50.0' + total_price_excl_tax_with_discount_base: '50.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:43.215Z' + updated_at: '2026-07-10T12:52:43.250Z' + - id: '492272816223160147' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:43.217Z' + updated_at: '2026-07-10T12:52:43.217Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:43.221Z' + updated_at: '2026-07-10T12:52:43.221Z' + subscription: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenRecurringSalesInvoiceCannotBeEditedDueToActiveSubscription: + summary: Returns 400 when recurring sales invoice cannot be edited due to active subscription + value: + error: cannot be updated + symbolic: + id: cannot_be_updated + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenRecurringSalesInvoiceDoesNotExist: + summary: Returns 404 when recurring sales invoice does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenValidationFails: + summary: Returns 422 when validation fails + value: + error: + invoice_date: + - must be further in the future + details: + invoice_date: + - error: too_early + operationId: patch_administration_id_recurring_sales_invoices_id + delete: + summary: Destroy or deactivate a recurring sales invoice + description: |- + A recurring sales invoice will be destroyed if it has not created any sales invoices. If it has created sales invoices, it will be deactivated. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Recurring sales invoice deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenRecurringSalesInvoiceDoesNotExist: + summary: Returns 404 when recurring sales invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_recurring_sales_invoices_id + /{administration_id}/recurring_sales_invoices/{recurring_sales_invoice_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the recurring sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: recurring_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfTheIdIsWrong: + summary: Returns 404 if the id is wrong + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_recurring_sales_invoices_recurring_sales_invoice_id_notes_id + /{administration_id}/recurring_sales_invoices/{recurring_sales_invoice_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the recurring sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: recurring_sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + $ref: '#/components/schemas/identifier' + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492272817150101400 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492272817204627355' + administration_id: 123 + entity_id: '492272817131227029' + entity_type: RecurringSalesInvoice + user_id: '492272801297728613' + assignee_id: '492272817150101401' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:52:44.152Z' + updated_at: '2026-07-10T12:52:44.152Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenRecurringSalesInvoiceDoesNotExist: + summary: Returns 400 when recurring sales invoice does not exist + value: + error: Entity is invalid; User has no permissions to notes for RecurringSalesInvoice + symbolic: + entity: not_found + user: insufficient_permissions + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenValidationFails: + summary: Returns 422 when validation fails + value: + error: + note: + - can't be blank + todo_type: + - can't be blank + details: + note: + - error: blank + todo_type: + - error: blank + operationId: post_administration_id_recurring_sales_invoices_recurring_sales_invoice_id_notes + /{administration_id}/recurring_sales_invoices{format}: + get: + summary: List all recurring sales invoices + description: |- + Returns a paginated list of recurring sales invoices in the administration. + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `state:active,contact_id:123`). Any filter you pass replaces the defaults below entirely, so include every key you need. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | --- | --- | --- | --- | + | state | `String` | `active` | `active` or `inactive` | + | frequency | `String` | `all` | `all`, `day`, `week`, `month`, `quarter` or `year` | + | auto_send | `Boolean` | `null` | `null`, `true` or `false` | + | contact_id | `Integer` | | Filters recurring invoices by a single contact | + | workflow_id | `Integer` | | Filters recurring invoices by a single workflow | + schema: + type: string + default: state:active + examples: + ReturnsRecurringInvoicesFilteredOnContact: + summary: Returns recurring invoices filtered on contact + value: contact_id:492272813485328027 + ReturnsRecurringInvoicesFilteredOnFrequency: + summary: Returns recurring invoices filtered on frequency + value: frequency:month + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of recurring sales invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/recurring_sales_invoice_response' + examples: + ReturnsRecurringInvoicesFilteredOnContact: + summary: Returns recurring invoices filtered on contact + value: + - id: '492272813524125341' + administration_id: 123 + contact_id: '492272813485328027' + contact: + id: '492272813485328027' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:40.606Z' + updated_at: '2026-07-10T12:52:40.606Z' + version: 1783687960 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: month + frequency: 1 + created_at: '2026-07-10T12:52:40.643Z' + updated_at: '2026-07-10T12:52:40.648Z' + version: 1783687960 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272813526222494' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:40.645Z' + updated_at: '2026-07-10T12:52:40.645Z' + - id: '492272813528319647' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:40.647Z' + updated_at: '2026-07-10T12:52:40.647Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:40.650Z' + updated_at: '2026-07-10T12:52:40.650Z' + subscription: null + ReturnsRecurringInvoicesFilteredOnFrequency: + summary: Returns recurring invoices filtered on frequency + value: + - id: '492272814094550733' + administration_id: 123 + contact_id: '492272814055753419' + contact: + id: '492272814055753419' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:41.150Z' + updated_at: '2026-07-10T12:52:41.150Z' + version: 1783687961 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: month + frequency: 1 + created_at: '2026-07-10T12:52:41.188Z' + updated_at: '2026-07-10T12:52:41.193Z' + version: 1783687961 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272814096647886' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.189Z' + updated_at: '2026-07-10T12:52:41.189Z' + - id: '492272814098745039' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.191Z' + updated_at: '2026-07-10T12:52:41.191Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:41.195Z' + updated_at: '2026-07-10T12:52:41.195Z' + subscription: null + ReturnsAllRecurringSalesInvoicesOfAnAdministration: + summary: Returns all recurring sales invoices of an administration + value: + - id: '492272814539146996' + administration_id: 123 + contact_id: '492272814433240811' + contact: + id: '492272814433240811' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:41.510Z' + updated_at: '2026-07-10T12:52:41.510Z' + version: 1783687961 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: year + frequency: 1 + created_at: '2026-07-10T12:52:41.612Z' + updated_at: '2026-07-10T12:52:41.616Z' + version: 1783687961 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272814541244149' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.613Z' + updated_at: '2026-07-10T12:52:41.613Z' + - id: '492272814542292726' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.615Z' + updated_at: '2026-07-10T12:52:41.615Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:41.618Z' + updated_at: '2026-07-10T12:52:41.618Z' + subscription: null + - id: '492272814500349680' + administration_id: 123 + contact_id: '492272814433240811' + contact: + id: '492272814433240811' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:41.510Z' + updated_at: '2026-07-10T12:52:41.510Z' + version: 1783687961 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: year + frequency: 1 + created_at: '2026-07-10T12:52:41.575Z' + updated_at: '2026-07-10T12:52:41.579Z' + version: 1783687961 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272814502446833' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.576Z' + updated_at: '2026-07-10T12:52:41.576Z' + - id: '492272814504543986' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.578Z' + updated_at: '2026-07-10T12:52:41.578Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:41.581Z' + updated_at: '2026-07-10T12:52:41.581Z' + subscription: null + - id: '492272814462600940' + administration_id: 123 + contact_id: '492272814433240811' + contact: + id: '492272814433240811' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:41.510Z' + updated_at: '2026-07-10T12:52:41.510Z' + version: 1783687961 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: year + frequency: 1 + created_at: '2026-07-10T12:52:41.538Z' + updated_at: '2026-07-10T12:52:41.543Z' + version: 1783687961 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272814464698093' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.540Z' + updated_at: '2026-07-10T12:52:41.540Z' + - id: '492272814466795246' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.542Z' + updated_at: '2026-07-10T12:52:41.542Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:41.545Z' + updated_at: '2026-07-10T12:52:41.545Z' + subscription: null + - id: '492272814412269286' + administration_id: 123 + contact_id: '492272814367180516' + contact: + id: '492272814367180516' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:41.446Z' + updated_at: '2026-07-10T12:52:41.446Z' + version: 1783687961 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: month + frequency: 1 + created_at: '2026-07-10T12:52:41.490Z' + updated_at: '2026-07-10T12:52:41.496Z' + version: 1783687961 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272814414366439' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.492Z' + updated_at: '2026-07-10T12:52:41.492Z' + - id: '492272814416463592' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.495Z' + updated_at: '2026-07-10T12:52:41.495Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:41.499Z' + updated_at: '2026-07-10T12:52:41.499Z' + subscription: null + ReturnsPaginatedRecurringSalesInvoicesOnPage2: + summary: Returns paginated recurring sales invoices on page 2 + value: + - id: '492272814786610949' + administration_id: 123 + contact_id: '492272814719502080' + contact: + id: '492272814719502080' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:41.783Z' + updated_at: '2026-07-10T12:52:41.783Z' + version: 1783687961 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: year + frequency: 1 + created_at: '2026-07-10T12:52:41.847Z' + updated_at: '2026-07-10T12:52:41.852Z' + version: 1783687961 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272814788708102' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.849Z' + updated_at: '2026-07-10T12:52:41.849Z' + - id: '492272814789756679' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:41.851Z' + updated_at: '2026-07-10T12:52:41.851Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:41.854Z' + updated_at: '2026-07-10T12:52:41.854Z' + subscription: null + ReturnsPaginatedRecurringSalesInvoicesOnPage1: + summary: Returns paginated recurring sales invoices on page 1 + value: + - id: '492272815235401502' + administration_id: 123 + contact_id: '492272815016249109' + contact: + id: '492272815016249109' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:42.066Z' + updated_at: '2026-07-10T12:52:42.066Z' + version: 1783687962 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2026-07-11' + invoice_date: '2026-07-11' + last_date: '2026-07-11' + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: Project X + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: year + frequency: 1 + created_at: '2026-07-10T12:52:42.275Z' + updated_at: '2026-07-10T12:52:42.280Z' + version: 1783687962 + prices_are_incl_tax: false + total_price_excl_tax: '2.91' + total_price_excl_tax_base: '2.91' + total_price_incl_tax: '3.52' + total_price_incl_tax_base: '3.52' + details: + - id: '492272815237498655' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 5 stuks + amount_decimal: '5.0' + description: Appels + price: '0.45' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '2.25' + total_price_excl_tax_with_discount_base: '2.25' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:42.277Z' + updated_at: '2026-07-10T12:52:42.277Z' + - id: '492272815239595808' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 2 stuks + amount_decimal: '2.0' + description: Peren + price: '0.33' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '0.66' + total_price_excl_tax_with_discount_base: '0.66' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:52:42.279Z' + updated_at: '2026-07-10T12:52:42.279Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:42.283Z' + updated_at: '2026-07-10T12:52:42.283Z' + subscription: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyRecurringSalesInvoicesAreRequested: + summary: Returns an error when too many recurring sales invoices are requested + value: + error: per_page does not have a valid value + operationId: get_administration_id_recurring_sales_invoices + post: + summary: Creates a new recurring sales invoice + description: |- + A recurring sales invoice will create new sales invoices on set intervals. To create a new recurring sales invoice, + you need to provide at least a contact and details for the invoice. Furthermore you need to determine the planning. + The following fields will influence the planning: + + 1. `invoice_date`: the date in which the first invoice should be created + 2. `frequency_type`: the type of frequency you want to use, for example `month` + 3. `frequency`: defines the actual frequency, e.g. `frequency=2` and `frequency_type=month` will create an invoice every 2 months + 4. `has_desired_count`: whether or not the desired count should take effect + 5. `desired_count`: maximum number of sales invoices to create + + ### Required scope(s) + `sales_invoices` + tags: + - Recurring sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + recurring_sales_invoice: + type: object + unevaluatedProperties: false + properties: + document_style_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid document style id. + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + contact_person_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact person id. + update_contact: + type: + - boolean + - string + description: When `true`, the contact's address and other details are refreshed from the current contact record each time a new invoice is generated. + reference: + type: string + description: A reference to include on each generated invoice, e.g. a contract or project code. + invoice_date: + type: string + description: Should be in the future. + workflow_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid workflow id. If not provided, the contact's invoice workflow is used. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. Defaults to the workflow's currency. + first_due_interval: + type: integer + description: The number of days after the invoice date before each generated invoice is due. Defaults to the first workflow step's due interval. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on generated invoices are inclusive of tax. Defaults to the workflow's setting. + discount: + $ref: '#/components/schemas/number' + description: Discount percentage, e.g. 10,0%. + frequency_type: + type: string + description: Can be `day`, `week`, `month`, `quarter` or `year`. + frequency: + type: string + description: The interval multiplier. Combined with `frequency_type` to determine the billing cycle, e.g. `frequency=2` with `frequency_type=month` creates an invoice every 2 months. + has_desired_count: + type: + - boolean + - string + description: When `true`, the recurring invoice will stop generating new invoices after `desired_count` invoices have been created. + desired_count: + type: string + description: The maximum number of invoices to generate. Only applied when `has_desired_count` is `true`. + auto_send: + type: + - boolean + - string + description: When `true`, each generated invoice is automatically sent to the contact via the configured delivery method. + mergeable: + type: + - boolean + - string + description: When `true`, generated invoices may be merged with other mergeable invoices for the same contact, if they share the same workflow, layout, currency, language and other invoice settings. + details_attributes: + $ref: '#/components/schemas/details_attributes' + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + required: [] + examples: + CreatesANewRecurringSalesInvoice: + summary: Creates a new recurring sales invoice + value: + recurring_sales_invoice: + reference: My recurring invoice + contact_id: 492272818262640640 + invoice_date: '2030-01-01' + details_attributes: + '0': + description: Table + price: '10.5' + tax_rate_id: 492272818269980700 + ledger_account_id: 492272818281515000 + responses: + '201': + description: Recurring sales invoice created + content: + application/json: + schema: + $ref: '#/components/schemas/recurring_sales_invoice_response' + examples: + CreatesANewRecurringSalesInvoice: + summary: Creates a new recurring sales invoice + value: + id: '492272818319263734' + administration_id: 123 + contact_id: '492272818262640624' + contact: + id: '492272818262640624' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-2 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:52:45.162Z' + updated_at: '2026-07-10T12:52:45.162Z' + version: 1783687965 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000002/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + workflow_id: '492272802756297871' + start_date: '2030-01-01' + invoice_date: '2030-01-01' + last_date: null + active: true + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + reference: My recurring invoice + language: nl + currency: EUR + discount: '0.0' + first_due_interval: 14 + auto_send: false + sending_scheduled_at: null + sending_scheduled_user_id: null + frequency_type: year + frequency: 1 + created_at: '2026-07-10T12:52:45.217Z' + updated_at: '2026-07-10T12:52:45.220Z' + version: 1783687965 + prices_are_incl_tax: false + total_price_excl_tax: '10.5' + total_price_excl_tax_base: '10.5' + total_price_incl_tax: '12.71' + total_price_incl_tax_base: '12.71' + details: + - id: '492272818321360887' + administration_id: 123 + tax_rate_id: '492272818269980658' + ledger_account_id: '492272818281514996' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Table + price: '10.5' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '10.5' + total_price_excl_tax_with_discount_base: '10.5' + tax_report_reference: [] + mandatory_tax_text: null + created_at: '2026-07-10T12:52:45.218Z' + updated_at: '2026-07-10T12:52:45.218Z' + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: recurring_sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:52:45.222Z' + updated_at: '2026-07-10T12:52:45.222Z' + subscription: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenMergeableIsTrueButAutoSendIsFalse: + summary: Returns 400 when mergeable is true but auto send is false + value: + error: if mergeable is true, auto_send must be true + symbolic: + mergeable: invalid + '402': + description: Payment required + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns402WhenPaymentIsRequired: + summary: Returns 402 when payment is required + value: + error: creating recurring sales invoices is limited + symbolic: + administration: limit_reached + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenValidationFails: + summary: Returns 422 when validation fails + value: + error: + invoice_date: + - must be further in the future + details: + invoice_date: + - error: too_early + operationId: post_administration_id_recurring_sales_invoices + /{administration_id}/reports/assets{format}: + get: + summary: Assets report + description: |- + Get the assets report for the administration. + + ### Required scope(s) + `documents` + tags: + - Reports + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + security: + - bearerAuth: + - documents + responses: + '200': + description: An assets report + content: + application/json: + schema: + type: array + items: + type: object + properties: + asset_id: + $ref: '#/components/schemas/identifier' + ledger_account_id: + $ref: '#/components/schemas/identifier' + name: + type: string + purchase_date: + type: string + format: date + lifespan: + type: + - string + - 'null' + description: In seconds + purchase_value: + type: string + residual_value: + type: string + total_value_changes_since_purchase: + type: string + value_at_begin: + type: string + investment: + type: string + depreciation: + type: string + divestment: + type: string + value_changes: + type: string + value_at_end: + type: string + examples: + ReturnsAssetsReport: + summary: Returns assets report + value: + - asset_id: '492272939091101659' + ledger_account_id: '492272939077470170' + name: Test Asset + purchase_date: '2025-01-01' + lifespan: '157784760' + purchase_value: '12345.67' + residual_value: '10.0' + total_value_changes_since_purchase: '-200.0' + value_at_begin: '12145.67' + investment: '0' + depreciation: '0.0' + divestment: '0.0' + value_changes: '0.0' + value_at_end: '12145.67' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + - asset_id: '492272940039013427' + ledger_account_id: '492272940031673394' + name: Test Asset + purchase_date: '2025-01-01' + lifespan: '157784760' + purchase_value: '12345.67' + residual_value: '10.0' + total_value_changes_since_purchase: '0.0' + value_at_begin: '0' + investment: '12345.67' + depreciation: '0.0' + divestment: '0.0' + value_changes: '0.0' + value_at_end: '12345.67' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_assets + /{administration_id}/reports/balance_sheet{format}: + get: + summary: Balance sheet report + description: |- + Get the balance sheet report for the administration showing the financial position at the end of the specified period. + + ### Required scope(s) + `bank` + tags: + - Reports + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + responses: + '200': + description: A balance sheet report + content: + application/json: + schema: + type: object + properties: + debit: + type: object + description: Debit side of the balance sheet (assets) + properties: + total: + type: string + current_assets: + $ref: '#/components/schemas/balance_sheet_ledger_account' + non_current_assets: + $ref: '#/components/schemas/balance_sheet_ledger_account' + credit: + type: object + description: Credit side of the balance sheet (equity and liabilities) + properties: + total: + type: string + description: Total credit amount + equity: + $ref: '#/components/schemas/balance_sheet_ledger_account' + provisions: + $ref: '#/components/schemas/balance_sheet_ledger_account' + non_current_liabilities: + $ref: '#/components/schemas/balance_sheet_ledger_account' + current_liabilities: + $ref: '#/components/schemas/balance_sheet_ledger_account' + open_years: + type: array + description: Results per open year + items: + type: object + properties: + year: + type: string + value: + type: string + examples: + ReturnsABalanceSheetReport: + summary: Returns a balance sheet report + value: + debit: + total: '1100.0' + current_assets: + - ledger_account_id: '492273065110013860' + value: '800.0' + children: + - ledger_account_id: '492273065123645353' + value: '100.0' + non_current_assets: + - ledger_account_id: '492273065136228270' + value: '200.0' + children: [] + credit: + total: '1100.0' + equity: + - ledger_account_id: '492273065168734141' + value: '550.0' + children: [] + provisions: + - ledger_account_id: '492273065158248376' + value: '150.0' + children: [] + non_current_liabilities: [] + current_liabilities: + - ledger_account_id: '492273065146714035' + value: '300.0' + children: [] + open_years: + - year: '2024' + value: '100.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + debit: + total: '1100.0' + current_assets: + - ledger_account_id: '492273065327069162' + value: '800.0' + children: + - ledger_account_id: '492273065340700655' + value: '100.0' + non_current_assets: + - ledger_account_id: '492273065352234996' + value: '200.0' + children: [] + credit: + total: '1100.0' + equity: + - ledger_account_id: '492273065386836995' + value: '550.0' + children: [] + provisions: + - ledger_account_id: '492273065375303678' + value: '150.0' + children: [] + non_current_liabilities: [] + current_liabilities: + - ledger_account_id: '492273065363769337' + value: '300.0' + children: [] + open_years: + - year: '2024' + value: '100.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 12 months + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:bank] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_balance_sheet + /{administration_id}/reports/cash_flow{format}: + get: + summary: Cash flow report + description: |- + Get the cash flow report for the administration showing cash received and cash paid during the specified period. + + ### Required scope(s) + `bank` + tags: + - Reports + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - name: financial_account_id + in: query + required: false + description: Filter the cash flow report by a specific financial account + schema: + $ref: '#/components/schemas/identifier' + responses: + '200': + description: A cash flow report + content: + application/json: + schema: + type: object + properties: + cash_received_by_ledger_account: + $ref: '#/components/schemas/ledger_account_data' + cash_paid_by_ledger_account: + $ref: '#/components/schemas/ledger_account_data' + opening_balance: + type: string + closing_balance: + type: string + examples: + ReturnsACashFlowReport: + summary: Returns a cash flow report + value: + cash_received_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273017593792447' + value: '100.0' + cash_paid_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273017618958282' + value: '-50.0' + opening_balance: '0' + closing_balance: '50.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + cash_received_by_ledger_account: + ledger_accounts: [] + cash_paid_by_ledger_account: + ledger_accounts: [] + opening_balance: '0' + closing_balance: '0.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:bank] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_cash_flow + /{administration_id}/reports/creditors{format}: + get: + summary: Creditors report + description: |- + Returns a creditors report for the specified administration. + + ### Required scope(s) + `documents` + tags: + - Reports + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + creditors: + type: array + items: + $ref: '#/components/schemas/creditors_report_item' + examples: + ReturnsTheSecondPageOfTheReport: + summary: Returns the second page of the report + value: + creditors: + - contact_id: '492272947210225445' + amount: '100.0' + FiltersTheRepordOnASpecificPeriod: + summary: Filters the repord on a specific period + value: + creditors: + - contact_id: '492272947272091441' + amount: '100.0' + ReturnsACreditorsReportWithMultipleContacts: + summary: Returns a creditors report with multiple contacts + value: + creditors: + - contact_id: '492272947315083063' + amount: '200.0' + - contact_id: '492272947327665981' + amount: '100.0' + ReturnsAnEmptyReportIfNoCreditorsInThePeriodAreFound: + summary: Returns an empty report if no creditors in the period are found + value: + creditors: [] + ReturnsACreditorsReport: + summary: Returns a creditors report + value: + creditors: + - contact_id: '492272947413649225' + amount: '200.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + creditors: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_creditors + /{administration_id}/reports/creditors_aging{format}: + get: + summary: Creditors aging report + description: |- + Returns a creditors aging report for the specified administration. + + ### Required scope(s) + `documents` + tags: + - Reports + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period_until' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + creditors: + type: array + items: + $ref: '#/components/schemas/aging_report_item' + examples: + ExcludesContactsWithZeroBalance: + summary: Excludes contacts with zero balance + value: + creditors: + - contact_id: '492272980336838051' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + ReturnsTheSecondPageOfTheReport: + summary: Returns the second page of the report + value: + creditors: + - contact_id: '492272980438549961' + amount: '150.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '150.0' + - name: 30 - 60 dagen + amount: '0' + - name: Ouder + amount: '0.0' + - name: Totaal + amount: '150.0' + ReturnsAnEmptyReportIfNoCreditorsAreFound: + summary: Returns an empty report if no creditors are found + value: + creditors: [] + ReturnsACreditorsAgingReport: + summary: Returns a creditors aging report + value: + creditors: + - contact_id: '492272980537116134' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + ReturnsACreditorsAgingReportWithAPeriod: + summary: Returns a creditors aging report with a period + value: + creditors: + - contact_id: '492272980595836404' + amount: '500.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '200.0' + - name: 30 - 60 dagen + amount: '0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '500.0' + ReturnsACreditorsAgingReportWithMultipleContacts: + summary: Returns a creditors aging report with multiple contacts + value: + creditors: + - contact_id: '492272980651410946' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + - contact_id: '492272980678673936' + amount: '150.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '150.0' + - name: 30 - 60 dagen + amount: '0' + - name: Ouder + amount: '0.0' + - name: Totaal + amount: '150.0' + RequestsWithAPageSizeSmallerThanDefault: + summary: Requests with a page size smaller than default + value: + creditors: + - contact_id: '492272980808697394' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + FetchesWithoutPageAndPerPageAttributesUsingDefaultValues: + summary: Fetches without page and per page attributes, using default values + value: + creditors: + - contact_id: '492272980866369088' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + RequestsWithADifferentPage: + summary: Requests with a different page + value: + creditors: [] + RequestsWithAPageSizeLargerThanDefault: + summary: Requests with a page size larger than default + value: + creditors: + - contact_id: '492272981082375800' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenPerPageIsInvalid: + summary: Returns 400 when per page is invalid + value: + error: per_page is invalid, per_page does not have a valid value + Returns400WhenPerPageExceedsMaximum: + summary: Returns 400 when per page exceeds maximum + value: + error: per_page does not have a valid value + Returns400WhenPageIsInvalid: + summary: Returns 400 when page is invalid + value: + error: page is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_creditors_aging + /{administration_id}/reports/debtors{format}: + get: + summary: Debtors report + description: |- + Returns a debtors report for the specified administration. + + ### Required scope(s) + `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + debtors: + type: array + items: + $ref: '#/components/schemas/debtors_report_item' + examples: + ReturnsAnEmptyReportIfNoDebtorsInThePeriodAreFound: + summary: Returns an empty report if no debtors in the period are found + value: + debtors: [] + ReturnsADebtorsReportWithMultipleContacts: + summary: Returns a debtors report with multiple contacts + value: + debtors: + - contact_id: '492272981908653814' + amount: '200.0' + - contact_id: '492272981920188156' + amount: '100.0' + ReturnsTheSecondPageOfTheReport: + summary: Returns the second page of the report + value: + debtors: + - contact_id: '492272981972616968' + amount: '100.0' + FiltersTheRepordOnASpecificPeriod: + summary: Filters the repord on a specific period + value: + debtors: + - contact_id: '492272982022948628' + amount: '100.0' + ReturnsADebtorsReport: + summary: Returns a debtors report + value: + debtors: + - contact_id: '492272982061745946' + amount: '200.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + debtors: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_debtors + /{administration_id}/reports/debtors_aging{format}: + get: + summary: Debtors aging report + description: |- + Returns a debtors aging report for the specified administration. + + ### Required scope(s) + `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period_until' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + debtors: + type: array + items: + $ref: '#/components/schemas/aging_report_item' + examples: + ReturnsAnEmptyReportIfNoDebtorsAreFound: + summary: Returns an empty report if no debtors are found + value: + debtors: [] + ReturnsADebtorsAgingReportWithMultipleContacts: + summary: Returns a debtors aging report with multiple contacts + value: + debtors: + - contact_id: '492272839565509865' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + - contact_id: '492272839604307191' + amount: '150.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '150.0' + - name: 30 - 60 dagen + amount: '0' + - name: Ouder + amount: '0.0' + - name: Totaal + amount: '150.0' + ReturnsADebtorsAgingReport: + summary: Returns a debtors aging report + value: + debtors: + - contact_id: '492272839689241853' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + ReturnsADebtorsAgingReportWithAPeriod: + summary: Returns a debtors aging report with a period + value: + debtors: + - contact_id: '492272839790953739' + amount: '500.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '200.0' + - name: 30 - 60 dagen + amount: '0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '500.0' + ExcludesContactsWithZeroBalance: + summary: Excludes contacts with zero balance + value: + debtors: + - contact_id: '492272839893714201' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + ReturnsTheSecondPageOfTheReport: + summary: Returns the second page of the report + value: + debtors: + - contact_id: '492272840049952063' + amount: '150.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '150.0' + - name: 30 - 60 dagen + amount: '0' + - name: Ouder + amount: '0.0' + - name: Totaal + amount: '150.0' + FetchesWithoutPageAndPerPageAttributesUsingDefaultValues: + summary: Fetches without page and per page attributes, using default values + value: + debtors: + - contact_id: '492272840297416033' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + RequestsWithAPageSizeLargerThanDefault: + summary: Requests with a page size larger than default + value: + debtors: + - contact_id: '492272840391787887' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + RequestsWithAPageSizeSmallerThanDefault: + summary: Requests with a page size smaller than default + value: + debtors: + - contact_id: '492272840660223385' + amount: '600.0' + aging_buckets: + - name: 0 - 30 dagen + amount: '100.0' + - name: 30 - 60 dagen + amount: '200.0' + - name: Ouder + amount: '300.0' + - name: Totaal + amount: '600.0' + RequestsWithADifferentPage: + summary: Requests with a different page + value: + debtors: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenPerPageIsInvalid: + summary: Returns 400 when per page is invalid + value: + error: per_page is invalid, per_page does not have a valid value + Returns400WhenPerPageExceedsMaximum: + summary: Returns 400 when per page exceeds maximum + value: + error: per_page does not have a valid value + Returns400WhenPageIsInvalid: + summary: Returns 400 when page is invalid + value: + error: page is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_debtors_aging + /{administration_id}/reports/expenses_by_contact{format}: + get: + summary: Expenses by contact report + description: |- + Returns a expenses by contact report for the specified administration. + + ### Required scope(s) + `documents` + tags: + - Reports + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + expenses_by_contact: + type: array + items: + $ref: '#/components/schemas/contact_report_item' + examples: + ReturnsAExpensesByContactReport: + summary: Returns a expenses by contact report + value: + expenses_by_contact: + - contact_id: '492272981511243427' + amount: '30.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + expenses_by_contact: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_expenses_by_contact + /{administration_id}/reports/expenses_by_project{format}: + get: + summary: Expenses by project report + description: |- + Returns a expenses by project report for the specified administration. + + ### Required scope(s) + `documents` + tags: + - Reports + security: + - bearerAuth: + - documents + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + expenses_by_project: + type: array + items: + $ref: '#/components/schemas/project_report_item' + examples: + ReturnsAExpensesByProjectReport: + summary: Returns a expenses by project report + value: + expenses_by_project: + - project_id: null + amount: '100.0' + - project_id: '492273075118671017' + amount: '30.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + expenses_by_project: + - project_id: null + amount: '0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_expenses_by_project + /{administration_id}/reports/export/auditfile{format}: + post: + summary: Export auditfile + description: |- + Queue the export of an auditfile (XAF XML format) for the specified year. + The auditfile will be added to your [downloads](../downloads) when ready. + + The administration must not have any ledger accounts with missing or duplicate account IDs, + and the specified year must contain journal entries. + + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices` and `settings` + tags: + - Reports + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + required: + - year + properties: + year: + type: string + description: The year for which to generate the auditfile + example: '2024' + examples: + AcceptsVersion40Parameter: + summary: Accepts version 4.0 parameter + value: + year: '2024' + version: '4.0' + AcceptsVersion32Parameter: + summary: Accepts version 3.2 parameter + value: + year: '2024' + version: '3.2' + UsesDefaultVersion32WhenVersionIsNotSpecified: + summary: Uses default version 3.2 when version is not specified + value: + year: '2024' + QueuesAnAuditfileExportJobAndReturns204: + summary: Queues an auditfile export job and returns 204 + value: + year: '2024' + responses: + '204': + $ref: '#/components/responses/204_no_content' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenLedgerAccountsHaveDuplicateAccountIds: + summary: Returns 400 when ledger accounts have duplicate account ids + value: + error: Missing or duplicate account IDs + symbolic: + base: missing_or_duplicate_account_ids + Returns400WhenPeriodContainsNoJournalEntries: + summary: Returns 400 when period contains no journal entries + value: + error: Period contains no journal entries + symbolic: + period: contains_no_journal_entries + Returns400ForInvalidVersion: + summary: Returns 400 for invalid version + value: + error: version does not have a valid value + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:contacts, :documents, :estimates, :sales_invoices, :bank, :settings] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: post_administration_id_reports_export_auditfile + /{administration_id}/reports/export/brugstaat{format}: + post: + summary: Export brugstaat + description: |- + Queue the export of a brugstaat XML file for the specified year. The file will be added to your [downloads](../downloads) when ready. + + All ledger accounts must have valid RGS taxonomy codes assigned. + + + ### Required scope(s) + All of: `bank`, `documents` and `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - bank + - documents + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + required: + - year + properties: + year: + type: string + description: The year for which to generate the brugstaat + example: '2024' + examples: + GeneratesABrugstaatAndReturns204: + summary: Generates a brugstaat and returns 204 + value: + year: '2024' + responses: + '204': + $ref: '#/components/responses/204_no_content' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenLedgerAccountsHaveInvalidTaxonomyCodes: + summary: Returns 400 when ledger accounts have invalid taxonomy codes + value: + error: Not all categories are linked to a RGS code. This is mandatory before downloading a RGS Brugstaat + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:documents, :sales_invoices, :bank] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: post_administration_id_reports_export_brugstaat + /{administration_id}/reports/export/ledger_accounts{format}: + post: + summary: Export ledger accounts + description: |- + Queue the export of ledger accounts (grootboekkaarten) to an Excel file for the specified year. This file contains + all bookings and can be used for manual audits. The file will be added to your [downloads](../downloads) when ready. + + The specified year must contain journal entries. + + + ### Required scope(s) + `documents` and `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - documents + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + required: + - year + properties: + year: + type: string + description: The year for which to generate the ledger accounts + example: '2024' + examples: + QueuesALedgerAccountsExportJobAndReturns204: + summary: Queues a ledger accounts export job and returns 204 + value: + year: '2024' + responses: + '204': + $ref: '#/components/responses/204_no_content' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenPeriodContainsNoJournalEntries: + summary: Returns 400 when period contains no journal entries + value: + error: Period contains no journal entries + symbolic: + period: contains_no_journal_entries + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices, :documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: post_administration_id_reports_export_ledger_accounts + /{administration_id}/reports/general_ledger{format}: + get: + summary: General ledger report + description: |- + Get the general ledger report for the administration showing all ledger accounts with their balances and movements during the specified period. + + ### Required scope(s) + `bank` + tags: + - Reports + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + responses: + '200': + description: A general ledger report + content: + application/json: + schema: + type: object + properties: + debit_sums: + $ref: '#/components/schemas/ledger_account_data' + credit_sums: + $ref: '#/components/schemas/ledger_account_data' + start_balance: + $ref: '#/components/schemas/ledger_account_data' + final_balance: + $ref: '#/components/schemas/ledger_account_data' + examples: + ReturnsGeneralLedgerData: + summary: Returns general ledger data + value: + debit_sums: + ledger_accounts: + - ledger_account_id: '492272811522393592' + value: '1000.0' + credit_sums: + ledger_accounts: + - ledger_account_id: '492272811522393592' + value: '500.0' + start_balance: + ledger_accounts: + - ledger_account_id: '492272811522393592' + value: '300.0' + final_balance: + ledger_accounts: + - ledger_account_id: '492272811522393592' + value: '800.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + debit_sums: + ledger_accounts: + - ledger_account_id: '492272811841160709' + value: '1000.0' + credit_sums: + ledger_accounts: + - ledger_account_id: '492272811841160709' + value: '500.0' + start_balance: + ledger_accounts: + - ledger_account_id: '492272811841160709' + value: '300.0' + final_balance: + ledger_accounts: + - ledger_account_id: '492272811841160709' + value: '800.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 12 months + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:bank] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_general_ledger + /{administration_id}/reports/journal_entries{format}: + get: + summary: Journal entries report + description: |- + Get the journal entries report showing all bookings within the specified period. + This endpoint allows filtering by various criteria including project, contact, ledger account, and account types. + + **Requirements:** + - At least one of project_id, contact_id, or ledger_account_id is required + - When account_type is provided, either contact_id or project_id must also be specified + + **Example Use Cases:** + - To get a report for revenue by project detail, use account_type parameter with value "revenue" and the required project_id + - To get a report for revenue by contact detail, use account_type parameter with value "revenue" and the required contact_id + - To get a report for expenses by project detail, make one request for account_type "expenses" and one for "direct_costs", both with the required project_id + - To get a report for expenses by contact detail, make one request for account_type "expenses" and one for "direct_costs", both with the required contact_id + + + ### Required scope(s) + `documents` and `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - documents + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + - name: project_id + in: query + required: false + description: Filter by project ID, use "null" to filter entries without project + schema: + type: string + - name: contact_id + in: query + required: false + description: Filter by contact ID, use "null" to filter entries without contact + schema: + type: string + examples: + ReturnsA200IfTheAccountTypesArePresentAndAContactIdIsPresent: + summary: Returns a 200 if the account types are present and a contact id is present + value: '123' + - name: ledger_account_id + in: query + required: false + description: Filter by ledger account ID + schema: + $ref: '#/components/schemas/identifier' + examples: + ReturnsAJournalEntriesReportWithPagination: + summary: Returns a journal entries report with pagination + value: '123' + - name: account_type + in: query + required: false + description: | + Filter by ledger account type + schema: + type: string + enum: + - non_current_assets + - current_assets + - equity + - non_current_liabilities + - current_liabilities + - revenue + - direct_costs + - expenses + - other_income_expenses + - other + - temporary + - provisions + examples: + ReturnsA200IfTheAccountTypesArePresentAndAContactIdIsPresent: + summary: Returns a 200 if the account types are present and a contact id is present + value: revenue + responses: + '200': + description: A paginated list of journal entries (bookings) + headers: + X-Total-Count: + $ref: '#/components/headers/x-total-count' + Link: + $ref: '#/components/headers/link' + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + description: Unique identifier for the journal entry + administration_id: + $ref: '#/components/schemas/identifier' + description: ID of the administration this entry belongs to + date: + type: string + format: date + description: Date of the journal entry + document_type: + type: string + description: Type of document this entry relates to + document_id: + $ref: '#/components/schemas/identifier' + description: ID of the related document + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: ID of the ledger account + project_id: + $ref: '#/components/schemas/identifier_nullable' + description: ID of the related project, if any + contact_id: + $ref: '#/components/schemas/identifier_nullable' + description: ID of the related contact, if any + tax_rate_id: + $ref: '#/components/schemas/identifier_nullable' + description: ID of the applied tax rate, if any + financial_account_id: + $ref: '#/components/schemas/identifier_nullable' + description: ID of the financial account, if any + amount: + type: string + description: Amount of the journal entry in the administration's currency + description: + type: string + description: Description of the journal entry + examples: + ReturnsAJournalEntriesReportWithPagination: + summary: Returns a journal entries report with pagination + value: + - id: je_6 + date: '2025-06-14' + document_type: Document + document_id: '492272938280552110' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '500.0' + description: Large customer payment + - id: je_5 + date: '2025-06-12' + document_type: Document + document_id: '492272938274260650' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-75.0' + description: Credit note + - id: je_3 + date: '2025-06-10' + document_type: Document + document_id: '492272938261677730' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '250.0' + description: Product sales + - id: je_4 + date: '2025-06-08' + document_type: Document + document_id: '492272938267969190' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-25.0' + description: Sales return + - id: je_2 + date: '2025-06-05' + document_type: Document + document_id: '492272938255386270' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '50.0' + description: Service income + ReturnsA200IfTheAccountTypesArePresentAndAContactIdIsPresent: + summary: Returns a 200 if the account types are present and a contact id is present + value: [] + ReturnsAJournalEntriesReportWithSpecificPeriod: + summary: Returns a journal entries report with specific period + value: + - id: je_6 + date: '2025-06-14' + document_type: Document + document_id: '492272938524870414' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '500.0' + description: Large customer payment + - id: je_5 + date: '2025-06-12' + document_type: Document + document_id: '492272938518578954' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-75.0' + description: Credit note + - id: je_3 + date: '2025-06-10' + document_type: Document + document_id: '492272938503898882' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '250.0' + description: Product sales + - id: je_4 + date: '2025-06-08' + document_type: Document + document_id: '492272938511238918' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-25.0' + description: Sales return + - id: je_2 + date: '2025-06-05' + document_type: Document + document_id: '492272938497607422' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '50.0' + description: Service income + - id: je_7 + date: '2025-06-03' + document_type: Document + document_id: '492272938531161874' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '15.5' + description: Small miscellaneous income + - id: je_1 + date: '2025-06-01' + document_type: Document + document_id: '492272938491315962' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '100.0' + description: Revenue from sales + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfNoProjectContactOrLedgerAccountIsPresent: + summary: Returns a 400 if no project, contact or ledger account is present + value: + error: at least a contact_id, project_id or ledger_account_id is required + ReturnsA400IfTheAccountTypeIsPresentButNoContactIdOrProjectIdIsPresent: + summary: Returns a 400 if the account type is present but no contact id or project id is present + value: + error: when account_type is present, a contact_id or project_id is required + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices, :documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_journal_entries + /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}: + get: + summary: Ledger account report + description: |- + This endpoint is deprecated and should no longer be used. It has been replaced by the `Journal entries report`. + + ### Required scope(s) + `documents` and `sales_invoices` + deprecated: true + x-sunset: '2025-12-31' + tags: + - Reports + security: + - bearerAuth: + - documents + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: ledger_account_id + in: path + required: true + description: The ID of the ledger account to get the report for + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A paginated list of ledger account bookings (journal entries) + headers: + X-Total-Count: + $ref: '#/components/headers/x-total-count' + Link: + $ref: '#/components/headers/link' + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + administration_id: + $ref: '#/components/schemas/identifier' + date: + type: string + format: date + document_type: + type: string + document_id: + $ref: '#/components/schemas/identifier' + ledger_account_id: + $ref: '#/components/schemas/identifier' + project_id: + $ref: '#/components/schemas/identifier_nullable' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + tax_rate_id: + $ref: '#/components/schemas/identifier_nullable' + financial_account_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: string + description: + type: string + examples: + ReturnsALedgerAccountReport: + summary: Returns a ledger account report + value: + - id: je_6 + date: '2025-06-14' + document_type: Document + document_id: '492272845594821701' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '500.0' + description: Large customer payment + - id: je_5 + date: '2025-06-12' + document_type: Document + document_id: '492272845587481665' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-75.0' + description: Credit note + - id: je_3 + date: '2025-06-10' + document_type: Document + document_id: '492272845573850169' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '250.0' + description: Product sales + - id: je_4 + date: '2025-06-08' + document_type: Document + document_id: '492272845580141629' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-25.0' + description: Sales return + - id: je_2 + date: '2025-06-05' + document_type: Document + document_id: '492272845566510133' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '50.0' + description: Service income + - id: je_7 + date: '2025-06-03' + document_type: Document + document_id: '492272845601113161' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '15.5' + description: Small miscellaneous income + - id: je_1 + date: '2025-06-01' + document_type: Document + document_id: '492272845559170097' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '100.0' + description: Revenue from sales + ReturnsALedgerAccountReportWithPagination: + summary: Returns a ledger account report with pagination + value: + - id: je_6 + date: '2025-06-14' + document_type: Document + document_id: '492272845692339301' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '500.0' + description: Large customer payment + - id: je_5 + date: '2025-06-12' + document_type: Document + document_id: '492272845686047841' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-75.0' + description: Credit note + - id: je_3 + date: '2025-06-10' + document_type: Document + document_id: '492272845672416345' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '250.0' + description: Product sales + - id: je_4 + date: '2025-06-08' + document_type: Document + document_id: '492272845678707805' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '-25.0' + description: Sales return + - id: je_2 + date: '2025-06-05' + document_type: Document + document_id: '492272845665076309' + ledger_account_id: '123' + project_id: null + contact_id: null + tax_rate_id: null + financial_account_id: null + amount: '50.0' + description: Service income + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices, :documents] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheLedgerAccountDoesNotExist: + summary: Returns a 404 if the ledger account does not exist + value: + error: 'Record not found for model name: Category' + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_ledger_accounts_ledger_account_id + /{administration_id}/reports/profit_loss{format}: + get: + summary: Profit loss report + description: |- + Get the profit loss report for the administration. + + ### Required scope(s) + `documents` and `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - documents + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - name: project_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + responses: + '200': + description: A profit loss report + content: + application/json: + schema: + type: object + properties: + revenue_by_ledger_account: + $ref: '#/components/schemas/ledger_account_data' + direct_costs_by_ledger_account: + $ref: '#/components/schemas/ledger_account_data' + expenses_by_ledger_account: + $ref: '#/components/schemas/ledger_account_data' + other_income_expenses_by_ledger_account: + $ref: '#/components/schemas/ledger_account_data' + gross_profit: + type: string + description: Gross profit amount + operating_profit: + type: string + description: Operating profit amount + net_profit: + type: string + description: Net profit amount + total_expenses: + type: string + description: Total expenses amount + total_revenue: + type: string + description: Total revenue amount + examples: + ReturnsAProfitLossReport: + summary: Returns a profit loss report + value: + revenue_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273043887883772' + value: '100.0' + direct_costs_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273043902563841' + value: '20.0' + expenses_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273043916195334' + value: '15.0' + other_income_expenses_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273043928778251' + value: '1.0' + gross_profit: '80.0' + operating_profit: '65.0' + net_profit: '66.0' + total_expenses: '34.0' + total_revenue: '100.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + revenue_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273044135347768' + value: '100.0' + direct_costs_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273044147930685' + value: '20.0' + expenses_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273044160513602' + value: '15.0' + other_income_expenses_by_ledger_account: + ledger_accounts: + - ledger_account_id: '492273044174145095' + value: '1.0' + gross_profit: '80.0' + operating_profit: '65.0' + net_profit: '66.0' + total_expenses: '34.0' + total_revenue: '100.0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 12 months + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices, :documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_profit_loss + /{administration_id}/reports/revenue_by_contact{format}: + get: + summary: Revenue by contact report + description: |- + Returns a revenue by contact report for the specified administration. + + ### Required scope(s) + `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + revenue_by_contact: + type: array + items: + $ref: '#/components/schemas/contact_report_item' + examples: + ReturnsARevenueByContactReport: + summary: Returns a revenue by contact report + value: + revenue_by_contact: + - contact_id: '492272948896335734' + amount: '30.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + revenue_by_contact: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_revenue_by_contact + /{administration_id}/reports/revenue_by_project{format}: + get: + summary: Revenue by project report + description: |- + Returns a revenue by project report for the specified administration. + + ### Required scope(s) + `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + revenue_by_project: + type: array + items: + $ref: '#/components/schemas/project_report_item' + examples: + ReturnsARevenueByProjectReport: + summary: Returns a revenue by project report + value: + revenue_by_project: + - project_id: null + amount: '1000.0' + - project_id: '492272868981212444' + amount: '7000.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + revenue_by_project: + - project_id: null + amount: '0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_revenue_by_project + /{administration_id}/reports/subscriptions{format}: + get: + summary: Subscriptions report + description: |- + Get the subscriptions report for the administration. + + ### Required scope(s) + `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + responses: + '200': + description: A subscriptions report + content: + application/json: + schema: + type: object + properties: + monthly_recurring_revenue: + type: string + annual_run_rate: + type: string + churn_rate: + type: string + lifetime_value: + type: string + examples: + ReturnsASubscriptionsReportJson: + summary: Returns a subscriptions report json + value: + monthly_recurring_revenue: '75.0' + annual_run_rate: '900.0' + churn_rate: '0' + lifetime_value: '0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + monthly_recurring_revenue: '0' + annual_run_rate: '0' + churn_rate: '0' + lifetime_value: '0' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_subscriptions + /{administration_id}/reports/tax{format}: + get: + summary: Tax report + description: |- + Get the tax report for the administration. + + ### Required scope(s) + `documents` and `sales_invoices` + tags: + - Reports + security: + - bearerAuth: + - documents + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/period' + responses: + '200': + description: A tax report + content: + application/json: + schema: + type: object + properties: + tax_rates: + type: array + items: + type: object + unevaluatedProperties: false + properties: + tax_rate_id: + $ref: '#/components/schemas/identifier' + name: + type: string + percentage: + type: string + report_reference: + type: string + amount: + type: string + type: + type: string + tax: + type: string + examples: + ReturnsATaxReport: + summary: Returns a tax report + value: + tax_rates: + - tax_rate_id: '492272802314847370' + name: 21% btw + percentage: '21.0' + report_reference: NL/1a + amount: '900.0' + type: sales_invoice + tax: '189.0' + - tax_rate_id: '492272802329527437' + name: 21% btw + percentage: '21.0' + report_reference: NL/5b + amount: '900.0' + type: purchase_invoice + tax: '189.0' + ReturnsSuccessForFullPeriod: + summary: Returns success for full period + value: + tax_rates: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenPeriodExceedsLimit: + summary: Returns error when period exceeds limit + value: + error: Period cannot exceed 1 month + ReturnsErrorForInvalidPeriodFormat: + summary: Returns error for invalid period format + value: + error: Period is invalid + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserLacksRequiredPermissions: + summary: Returns 401 when user lacks required permissions + value: + error: No access to [:sales_invoices, :documents] + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_reports_tax + /{administration_id}/sales_invoices/find_by_invoice_id/{invoice_id}{format}: + get: + summary: Get an invoice by invoice_id + description: |- + Get a sales invoice by the invoice_id field of the sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: invoice_id + in: path + required: true + schema: + type: string + description: Unique invoice identifier + example: 2025-0001 + - $ref: '#/components/parameters/format' + responses: + '200': + description: A sales invoice + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + ReturnsInvoiceByGivenId: + summary: Returns invoice by given id + value: + id: '492272892952708221' + administration_id: 123 + contact_id: '492272892904473720' + contact: + id: '492272892904473720' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:56.346Z' + updated_at: '2026-07-10T12:53:56.346Z' + version: 1783688036 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272892908668026' + contact_person: + id: null + contact_id: '492272892904473720' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:56.351Z' + updated_at: '2026-07-10T12:53:56.351Z' + version: 1783688036 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF510000000000000ZVS2ZKXG + short_payment_reference: RF51ZVS2ZKXG + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:53:56.392Z' + updated_at: '2026-07-10T12:53:56.489Z' + public_view_code: '191072' + public_view_code_expires_at: '2026-10-10T12:53:56.449Z' + version: 1783688036 + details: + - id: '492272892955853950' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:56.395Z' + updated_at: '2026-07-10T12:53:56.488Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/535a4eb5db810218fbbac07e7672973c479745ee41bdcb02a161a23296c4d3bb/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/535a4eb5db810218fbbac07e7672973c479745ee41bdcb02a161a23296c4d3bb/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:56.399Z' + updated_at: '2026-07-10T12:53:56.399Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:56.462Z' + updated_at: '2026-07-10T12:53:56.462Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:53:56.506Z' + updated_at: '2026-07-10T12:53:56.506Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheGivenInvoiceIdDoesNotExist: + summary: Returns 404 when the given invoice id does not exist + value: + error: 'Sales invoice with invoice_id: 1337 was not found' + symbolic: + invoice_id: not_found + operationId: get_administration_id_sales_invoices_find_by_invoice_id_invoice_id + /{administration_id}/sales_invoices/find_by_reference/{reference}{format}: + get: + summary: Get an invoice by reference + description: |- + Get a sales invoice by the reference field of the sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: reference + in: path + required: true + schema: + type: string + - $ref: '#/components/parameters/format' + responses: + '200': + description: A sales invoice + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + ReturnsInvoiceByGivenReference: + summary: Returns invoice by given reference + value: + id: '492272903551715210' + administration_id: 123 + contact_id: '492272903499286405' + contact: + id: '492272903499286405' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:06.450Z' + updated_at: '2026-07-10T12:54:06.450Z' + version: 1783688046 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272903503480711' + contact_person: + id: null + contact_id: '492272903499286405' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:06.454Z' + updated_at: '2026-07-10T12:54:06.454Z' + version: 1783688046 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF970000000000000W3KK944A + short_payment_reference: RF97W3KK944A + reference: invoice-123 + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:06.500Z' + updated_at: '2026-07-10T12:54:06.594Z' + public_view_code: '761802' + public_view_code_expires_at: '2026-10-10T12:54:06.555Z' + version: 1783688046 + details: + - id: '492272903554860939' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:06.503Z' + updated_at: '2026-07-10T12:54:06.593Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/548b127972257a3849b2f8bffce843ef8276d2f46af1de18fc92e54e64f3a8db/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/548b127972257a3849b2f8bffce843ef8276d2f46af1de18fc92e54e64f3a8db/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:06.507Z' + updated_at: '2026-07-10T12:54:06.507Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:06.568Z' + updated_at: '2026-07-10T12:54:06.568Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:06.612Z' + updated_at: '2026-07-10T12:54:06.612Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheGivenReferenceDoesNotExist: + summary: Returns 404 when the given reference does not exist + value: + error: 'Sales invoice with reference: 1337 was not found' + symbolic: + reference: not_found + operationId: get_administration_id_sales_invoices_find_by_reference_reference + /{administration_id}/sales_invoices/send_reminders{format}: + post: + summary: Sends a reminder + description: |- + This endpoint sends a reminder to a contact. A reminder can contain multiple sales invoices. + Reminders are grouped by workflow, identity and document style, so a contact with sales invoices + with different workflows, will receive multiple reminders. Only by grouping reminders like this, we + can assure the right content and layout of a reminder. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + sales_invoice_reminders: + type: array + items: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + workflow_id: + $ref: '#/components/schemas/identifier' + document_style_id: + $ref: '#/components/schemas/identifier' + identity_id: + $ref: '#/components/schemas/identifier' + sales_invoice_ids: + type: array + items: + $ref: '#/components/schemas/identifier' + description: Sales invoices of this contact to include in the reminder. + reminder_text: + type: string + description: Message shown in the reminder. Defaults to the text of the next step in the workflow. + delivery_method: + type: string + enum: + - Email + - Manual + description: How the reminder is delivered. Defaults to the contact's delivery method. + email_address: + type: string + description: Recipient email address. Only used when `delivery_method` is `Email`; defaults to the contact's email address. + required: + - contact_id + - workflow_id + - document_style_id + - identity_id + - sales_invoice_ids + required: + - sales_invoice_reminders + responses: + '200': + $ref: '#/components/responses/status_code' + '400': + $ref: '#/components/responses/400_bad_request' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_sales_invoices_send_reminders + /{administration_id}/sales_invoices/synchronization{format}: + get: + summary: List all ids and versions + description: |- + Returns all sales invoices in the administration. The list contains the invoice id and the version of the invoice. + Check if the version of the invoice is newer than the version you have stored locally, use the `POST` + variant for fetching invoices with the given ids. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: Comma-separated `key:value` filter terms. Same syntax as `GET /sales_invoices` — see that operation's description for the available keys. + schema: + type: string + examples: + RetrievesTheIdSForSynchronizationWithAFilter: + summary: Retrieves the id's for synchronization with a filter + value: state:open + responses: + '200': + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + examples: + RetrievesTheIdSForSynchronizationWithAFilter: + summary: Retrieves the id's for synchronization with a filter + value: + - id: '492272895922275621' + version: 1783688039 + - id: '492272896080610613' + version: 1783688039 + - id: '492272896239994180' + version: 1783688039 + RetrievesTheIdSForSynchronization: + summary: Retrieves the id's for synchronization + value: + - id: '492272897054737802' + version: 1783688040 + - id: '492272896875431291' + version: 1783688040 + - id: '492272896698221932' + version: 1783688040 + - id: '492272896521012572' + version: 1783688039 + ReturnsUniqueIdsEvenWhenSalesInvoicesHaveMultipleAttachments: + summary: Returns unique ids even when sales invoices have multiple attachments + value: + - id: '492272897149109651' + version: 1783688040 + - id: '492272897481508274' + version: 1783688040 + - id: '492272897320027555' + version: 1783688040 + operationId: get_administration_id_sales_invoices_synchronization + post: + summary: Fetch sales invoices with given ids + description: |- + Given a list of sales invoice ids, returns the sales invoice information belonging to the invoices. + Returns a maximum of 100 invoice, even if more ids are provided. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + ids: + type: array + items: + type: + - integer + - string + required: + - ids + examples: + RetrievesSalesInvoicesGivenByIds: + summary: Retrieves sales invoices given by ids + value: + ids: + - 492272918718317760 + - 492272918881895600 + responses: + '200': + description: A list of sales invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/sales_invoice_response' + examples: + RetrievesSalesInvoicesGivenByIds: + summary: Retrieves sales invoices given by ids + value: + - id: '492272918881895634' + administration_id: 123 + contact_id: '492272918489728174' + contact: + id: '492272918489728174' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:20.746Z' + updated_at: '2026-07-10T12:54:20.746Z' + version: 1783688060 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0003 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF830000000000000AV5HQ4MR + short_payment_reference: RF83AV5HQ4MR + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:21.120Z' + updated_at: '2026-07-10T12:54:21.213Z' + public_view_code: '927292' + public_view_code_expires_at: '2026-10-10T12:54:21.175Z' + version: 1783688061 + details: + - id: '492272918885041363' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:21.123Z' + updated_at: '2026-07-10T12:54:21.212Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/92e2f435ce62fe8c865f7f5d93c8b64c72ea3117e653eb03d141e6d2fde5a601/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/92e2f435ce62fe8c865f7f5d93c8b64c72ea3117e653eb03d141e6d2fde5a601/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:21.127Z' + updated_at: '2026-07-10T12:54:21.127Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:21.188Z' + updated_at: '2026-07-10T12:54:21.188Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0003 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:21.231Z' + updated_at: '2026-07-10T12:54:21.231Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + - id: '492272918718317763' + administration_id: 123 + contact_id: '492272918489728174' + contact: + id: '492272918489728174' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:20.746Z' + updated_at: '2026-07-10T12:54:20.746Z' + version: 1783688060 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0002 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF420000000000000XFSMPXHC + short_payment_reference: RF42XFSMPXHC + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:20.964Z' + updated_at: '2026-07-10T12:54:21.058Z' + public_view_code: '222291' + public_view_code_expires_at: '2026-10-10T12:54:21.020Z' + version: 1783688061 + details: + - id: '492272918721463492' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:20.967Z' + updated_at: '2026-07-10T12:54:21.056Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/a39d05e52a6e38e88a4b0d2609b98202cc18d4f3b0c3560d0eb7dc594c23e3f9/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/a39d05e52a6e38e88a4b0d2609b98202cc18d4f3b0c3560d0eb7dc594c23e3f9/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:20.970Z' + updated_at: '2026-07-10T12:54:20.970Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:21.033Z' + updated_at: '2026-07-10T12:54:21.033Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0002 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:21.075Z' + updated_at: '2026-07-10T12:54:21.075Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '400': + $ref: '#/components/responses/400_bad_request' + operationId: post_administration_id_sales_invoices_synchronization + /{administration_id}/sales_invoices/{id}/attachments{format}: + post: + summary: Add attachment to sales invoice + description: |- + Add an attachment to a sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Status code + content: + application/json: + schema: + type: integer + examples: + UploadsAnAttachment: + summary: Uploads an attachment + value: 200 + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_sales_invoices_id_attachments + /{administration_id}/sales_invoices/{id}/download_packing_slip_pdf{format}: + get: + summary: Download sales invoice packing slip PDF by id + description: |- + Redirects to the download URL of the sales invoice as packing slip PDF. The link is valid for 30 seconds. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: media + in: query + required: false + schema: + type: string + description: In case you want to hide sender address and logo you can set this to 'stationery'. + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + ReturnsInvoiceByGivenIdAsPackingSlipPdf: + summary: Returns invoice by given id as packing slip pdf + value: '"This resource has been moved temporarily to http://moneybird-storage:3100/116d290d9dea640cd5ef079531d3045ec1512ed5eeb57b50f7fe804577442bfb/fbbaaa56c43963f02e88c562c9014075fac3dbac6ef18c2a860c9e6d5b69acc6/download."' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_sales_invoices_id_download_packing_slip_pdf + /{administration_id}/sales_invoices/{id}/download_pdf{format}: + get: + summary: Download sales invoice PDF by id + description: |- + Redirects to the download URL of the sales invoice as PDF. The link is valid for 30 seconds. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: media + in: query + required: false + schema: + type: string + description: In case you want to hide sender address and logo you can set this to 'stationery'. + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + ReturnsInvoiceByGivenIdAsPdf: + summary: Returns invoice by given id as pdf + value: '"This resource has been moved temporarily to http://moneybird-storage:3100/c4958b006926f7219dc88d2569d8f09a50e54b2aea716c9deeb28e32fb8a99b8/5c3bf2a73007fe37e35f3e398b2c4958867340a1a3eb11df6e0d353a6c5aaae6/download."' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_sales_invoices_id_download_pdf + /{administration_id}/sales_invoices/{id}/download_ubl{format}: + get: + summary: Download sales invoice UBL by id + description: |- + Download the sales invoice as UBL. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A sales invoice + content: + text/xml: + schema: + type: string + examples: + ReturnsInvoiceByGivenIdAsUbl: + summary: Returns invoice by given id as ubl + value: | + + + 2.1 + + + 2019-0001 + 2019-10-01 + 2019-10-15 + 380 + EUR + + Project X + + + 2019-0001.pdf + PrimaryImage + + JVBERi0xLjMK/////woxIDAgb2JqCjw8IC9DcmVhdG9yIChQcmF3bikKL1By + b2R1Y2VyIChQcmF3bikKPj4KZW5kb2JqCjIgMCBvYmoKPDwgL0tpZHMgWzUg + MCBSXQovVHlwZSAvUGFnZXMKL0NvdW50IDEKPj4KZW5kb2JqCjMgMCBvYmoK + PDwgL1BhZ2VzIDIgMCBSCi9UeXBlIC9DYXRhbG9nCj4+CmVuZG9iago0IDAg + b2JqCjw8IC9MZW5ndGggMzg4Nwo+PgpzdHJlYW0KMC4wMDAgMC4wMDAgMC4w + MDAgcmcKMC4wMDAgMC4wMDAgMC4wMDAgUkcKcQpCVAoxLjAwMCAwLjAwMCAt + MC4wMDAgMS4wMDAgNDA5LjI4MCA4MTUuODkwIFRtCjAgLTUuNzQ0IFRkCjAu + MDAwIDAuMDAwIDAuMDAwIHJnCjAgVHMKL0YxLjAgOCBUZgpbPDU1NzcyMDQy + NjU2NDcyPiAtMTUgPDY5NmE2NjczMmQ0ZTYxNjE2ZDIwNDI+IDIwIDwyZTU2 + PiAxMjUgPDJlPl0gVEoKMCAtOS4yNDggVGQKWzw0NzcyNmY3NDY1MjA0ZDYx + NzI+IC0xNSA8NmI3NDIwMzEzMDMwPl0gVEoKMCAtOS4yNDggVGQKWzwzMTMx + MzIzMjIwNDE0MTIwNDU2ZTczNjM2ODY1NjQ2NT5dIFRKCjAgLTkuMjQ4IFRk + CjAgLTkuMjQ4IFRkCls8NmI3NjZiMmU+IDYwIDwyMDMxMzIzMzM0MzUzOTM4 + MzczNj5dIFRKCjAgLTkuMjQ4IFRkCls8NjI3NDc3PiA2MCA8MmU+IDYwIDwy + MDM4MzIzMzM5MzMzNjM1MzMzOD5dIFRKCjAgLTkuMjQ4IFRkCjAgLTkuMjQ4 + IFRkCi9GMi4wIDggVGYKWzw0NTJkNmQ2MTY5NmMzYT5dIFRKCi9GMS4wIDgg + VGYKWzwyMDY5NmU2Nj4gMzAgPDZmNDA3NTc3NjI2NTY0NzI+IC0xNSA8Njk2 + YTY2NzMyZDJkNmU2MTYxNmQyZTZlNmM+XSBUSgpFVAoKcQoyMDAuMDAwIDAg + MCA4MC4wMDAgMzYuMDAwIDczNS44OTAgY20KL0kxIERvClEKCkJUCjY2IDY5 + OS40MjggVGQKL0YxLjAgOSBUZgpbPDQyNmY2ZjZiNzM2ODZmNzAwYT5dIFRK + CkVUCgoKQlQKNjYgNjg5LjAyNCBUZAovRjEuMCA5IFRmCls8NTQ+IDEyMCA8 + MmU2MTJlNzY+IDgwIDwyZT4gNjAgPDIwNGE2ZjczMjA3Nj4gMjUgPDYxNmUy + MDY0NjU3MjIwNGQ2ZjZjNjU2ZTBhPl0gVEoKRVQKCgpCVAo2NiA2NzguNjIg + VGQKL0YxLjAgOSBUZgpbPDRmNzg2Nj4gMzAgPDZmNzI2NDBhPl0gVEoKRVQK + CgpCVAo2NiA2NjguMjE2IFRkCi9GMS4wIDkgVGYKWzwwYT5dIFRKCkVUCgoK + QlQKNjYgNjU3LjgxMiBUZAovRjEuMCA5IFRmCls8MGE+XSBUSgpFVAoKCkJU + CjM2IDU4MC45NDYgVGQKL0YxLjAgMTggVGYKWzw0Nj4gNTAgPDYxNjM3NDc1 + NzU3MjIwMzIzMDMxMzAyZDMwMzEzMTMyPl0gVEoKRVQKCgpCVAo0MDguNjQg + NTkxLjk3MiBUZAovRjEuMCA5IFRmCls8NDY+IDUwIDw2MTYzNzQ3NTc1NzI2 + NDYxNzQ3NTZkM2E+IDUwIDwyMD5dIFRKCkVUCgowLjAwMCAwLjAwMCAwLjAw + MCByZwoKQlQKNTA1LjYxNCA1OTEuOTcyIFRkCi9GMS4wIDkgVGYKWzwzMTM4 + MmQzMDM5MmQzMjMwMzEzMD5dIFRKCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBy + ZwoKQlQKNDA4LjY0IDU3OC4xIFRkCi9GMS4wIDkgVGYKWzw1Nj4gODAgPDY1 + NzI+IC0zMCA8NzY+IDI1IDw2MTZjNjQ2MTc0NzU2ZDNhPiA1MCA8MjA+XSBU + SgpFVAoKMC4wMDAgMC4wMDAgMC4wMDAgcmcKCkJUCjUwNS42MTQgNTc4LjEg + VGQKL0YxLjAgOSBUZgpbPDMwMzIyZDMxMzAyZDMyMzAzMTMwPl0gVEoKRVQK + CjAuMDAwIDAuMDAwIDAuMDAwIHJnCjAuNSB3CjAuMDAwIDAuMDAwIDAuMDAw + IFJHCjEgdwowLjAwMCAwLjAwMCAwLjAwMCBSRwowLjUgdwowLjAwMCAwLjAw + MCAwLjAwMCByZwoxIHcKMC4wMDAgMC4wMDAgMC4wMDAgUkcKMC41IHcKCkJU + Cjk2IDUzMC4wMjQgVGQKL0YyLjAgOSBUZgpbPDRmNmQ3MzYzPiAxMCA8Njg3 + MjY5NmE3NjY5NmU2Nz5dIFRKCkVUCgowLjAwMCAwLjAwMCAwLjAwMCByZwox + IHcKMC4wMDAgMC4wMDAgMC4wMDAgUkcKMC41IHcKCkJUCjM4NC41NjUgNTMw + LjAyNCBUZAovRjIuMCA5IFRmCls8NDI2NTY0NzI2MT4gMTAgPDY3Pl0gVEoK + RVQKCjAuMDAwIDAuMDAwIDAuMDAwIHJnCjEgdwowLjAwMCAwLjAwMCAwLjAw + MCBSRwowLjUgdwoKQlQKNDg5LjY5NSA1MzAuMDI0IFRkCi9GMi4wIDkgVGYK + Wzw1ND4gODAgPDZmNzQ2MTYxNmM+XSBUSgpFVAoKMC4wMDAgMC4wMDAgMC4w + MDAgcmcKMSB3CjAuMDAwIDAuMDAwIDAuMDAwIFJHCjAuNSB3CgpCVAo1MzQu + OTg3IDUzMC4wMjQgVGQKL0YyLjAgOSBUZgpbPDQyNTQ1Nz5dIFRKCkVUCgow + LjAwMCAwLjAwMCAwLjAwMCByZwozNi4wMDAgNTI2LjAzOCBtCjU1OS4yODAg + NTI2LjAzOCBsClMKMSB3CjAuMDAwIDAuMDAwIDAuMDAwIFJHCjAuNSB3CgpC + VAo0MCA1MTIuOTQ4IFRkCi9GMS4wIDkgVGYKWzwzMTIwNzg+XSBUSgpFVAoK + MC4wMDAgMC4wMDAgMC4wMDAgcmcKMSB3CjAuMDAwIDAuMDAwIDAuMDAwIFJH + CjAuNSB3CgpCVAo5NiA1MTIuOTQ4IFRkCi9GMS4wIDkgVGYKWzw3NDY1NzM3 + ND5dIFRKCkVUCgowLjAwMCAwLjAwMCAwLjAwMCByZwoxIHcKMC4wMDAgMC4w + MDAgMC4wMDAgUkcKMC41IHcKCkJUCjM3Mi45NDYgNTEyLjk0OCBUZAovRjEu + MCA5IFRmCls8ODAyMDMxMmUzMjMzMzQyYzMwMzA+XSBUSgpFVAoKMC4wMDAg + MC4wMDAgMC4wMDAgcmcKMSB3CjAuMDAwIDAuMDAwIDAuMDAwIFJHCjAuNSB3 + CgpCVAo0NzIuOTQ2IDUxMi45NDggVGQKL0YxLjAgOSBUZgpbPDgwMjAzMTJl + MzIzMzM0MmMzMDMwPl0gVEoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIHJnCjEg + dwowLjAwMCAwLjAwMCAwLjAwMCBSRwowLjUgdwoKQlQKNTM3LjQ3MSA1MTIu + OTQ4IFRkCi9GMS4wIDkgVGYKWzwzMTM5MjU+XSBUSgpFVAoKMC4wMDAgMC4w + MDAgMC4wMDAgcmcKMzYuMDAwIDUwNS42MzQgbQo1NTkuMjgwIDUwNS42MzQg + bApTCjAuMDAwIDAuMDAwIDAuMDAwIFJHCjEgdwowLjAwMCAwLjAwMCAwLjAw + MCBSRwowLjUgdwoKQlQKMzcxLjQ3OSA0OTIuMzQgVGQKL0YyLjAgOSBUZgpb + PDUzNzU2Mjc0NmY3NDYxNjE2YzNhPl0gVEoKRVQKCjAuMDAwIDAuMDAwIDAu + MDAwIHJnCjEgdwowLjAwMCAwLjAwMCAwLjAwMCBSRwowLjUgdwoKQlQKNDcy + Ljk0NiA0OTIuNTQ0IFRkCi9GMS4wIDkgVGYKWzw4MDIwMzEyZTMyMzMzNDJj + MzAzMD5dIFRKCkVUCgowLjAwMCAwLjAwMCAwLjAwMCByZwoxIHcKMC4wMDAg + MC4wMDAgMC4wMDAgUkcKMC41IHcKCkJUCjM3MS40NzkgNDcwLjQ2OCBUZAov + RjIuMCA5IFRmCls8NDI1NDU3MjAzMTM5MjUzYT5dIFRKCkVUCgowLjAwMCAw + LjAwMCAwLjAwMCByZwoxIHcKMC4wMDAgMC4wMDAgMC4wMDAgUkcKMC41IHcK + CkJUCjQ4MC40NTIgNDcwLjY3MiBUZAovRjEuMCA5IFRmCls8ODAyMDMyMzMz + NDJjMzQzNj5dIFRKCkVUCgowLjAwMCAwLjAwMCAwLjAwMCByZwozMTkuNDgw + IDQ2MS44OTAgbQo1MTkuNDgwIDQ2MS44OTAgbApTCjEgdwowLjAwMCAwLjAw + MCAwLjAwMCBSRwowLjUgdwoKQlQKMzg2LjY5OCA0NDguNTk2IFRkCi9GMi4w + IDkgVGYKWzw1ND4gODAgPDZmNzQ2MTYxNmMzYT5dIFRKCkVUCgowLjAwMCAw + LjAwMCAwLjAwMCByZwoxIHcKMC4wMDAgMC4wMDAgMC4wMDAgUkcKMC41IHcK + CkJUCjQ3Mi45NDYgNDQ4LjggVGQKL0YxLjAgOSBUZgpbPDgwMjAzMTJlMzQz + NjM4MmMzNDM2Pl0gVEoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIHJnCjM2LjAw + MCA2My43NDQgbQo1NTkuMjgwIDYzLjc0NCBsClMKCkJUCjM2IDUyLjI4MiBU + ZAovRjEuMCA5IFRmCls8NTc+IDMwIDw2NTIwNzY+IDI1IDw2NTcyN2E+IDE1 + IDw2ZjY1NmI+IDIwIDw2NTZlMjA3NTIwNzY3Mj4gLTE1IDw2OTY1NmU2NDY1 + NmM2OTZhNmIyMDY4NjU3NDIwNjI2Zj4gMTUgPDc2PiAyNSA8NjU2ZTczNzQ2 + MTYxNmU2NDY1MjA2MjY1NjQ3Mj4gMTAgPDYxNjcyMDYyNjk2ZTZlNjU2ZTIw + NjQ2NTIwNjc2NTczNzQ2NTZjNjQ2NTIwNjI2NTc0NjE2YzY5NmU2NzczNzQ2 + NTcyPiAtMjUgPDZkNjk2YTZlMjA3NDY1MjA3Nj4gMjUgPDZmNmM2NDZmNjU2 + ZTIwNmY3MDIwNmY2ZTdhPiAxNSA8NjUyMDYyNjE2ZTZiNzI2NTZiPiAyMCA8 + NjU2ZTY5NmU2NzJlPiA2MCA8MjA+IDUwIDw1Nj4gODAgPDZmNmY3MjBhPl0g + VEoKRVQKCgpCVAozNiA0MS44NzggVGQKL0YxLjAgOSBUZgpbPDc2NzI+IDEw + IDw2MTY3NjU2ZTIwNmI3NTZlNzQyMDc1MjA2MzZmNmU3NDYxNjM3NDIwNmY3 + MDZlNjU2ZDY1NmUyMDcwNjU3MjIwNjUyZDZkNjE2OTZjMmU+XSBUSgpFVAoK + UQoKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8IC9Db250ZW50cyA0IDAg + UgovUHJvY1NldCA2IDAgUgovTWVkaWFCb3ggWzAgMCA1OTUuMjggODQxLjg5 + XQovUGFyZW50IDIgMCBSCi9SZXNvdXJjZXMgPDwgL0ZvbnQgPDwgL0YxLjAg + NyAwIFIKL0YyLjAgOCAwIFIKPj4KL1hPYmplY3QgPDwgL0kxIDkgMCBSCj4+ + Cj4+Ci9UeXBlIC9QYWdlCj4+CmVuZG9iago2IDAgb2JqClsvUERGIC9UZXh0 + IC9JbWFnZUNdCmVuZG9iago3IDAgb2JqCjw8IC9CYXNlRm9udCAvSGVsdmV0 + aWNhCi9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCi9UeXBlIC9Gb250Ci9T + dWJ0eXBlIC9UeXBlMQo+PgplbmRvYmoKOCAwIG9iago8PCAvQmFzZUZvbnQg + L0hlbHZldGljYS1Cb2xkCi9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCi9U + eXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQo+PgplbmRvYmoKOSAwIG9iago8 + PCAvTGVuZ3RoIDM3MjkKL1dpZHRoIDIwMAovQ29sb3JTcGFjZSAvRGV2aWNl + R3JheQovRmlsdGVyIC9EQ1REZWNvZGUKL0hlaWdodCA4MAovVHlwZSAvWE9i + amVjdAovQml0c1BlckNvbXBvbmVudCA4Ci9TdWJ0eXBlIC9JbWFnZQo+Pgpz + dHJlYW0K/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQH/wAALCABQAMgBAREA/8QAHAABAAIDAQEBAAAAAAAAAAAAAAgJBgcK + AgUD/8QALBAAAQQDAQABBAIBAwUAAAAABAMFBgcAAggBCRITFBURFhcKGSIh + Q1mX2P/aAAgBAQAAPwDv4xjGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjGM + YxjGMhd0p2/WvP8AIWepo8xya+unZkFuXX3MtQpCPVkPQ+30ppSOXrrrpMNU + 1wOqpqo7WLYR7KwCBJGrNv7kwJRv2rptu8/lblFm8yc5SWEe8avdv288qvPU + HO7XA+nafErhCo7GmA1ZytK4oOsvCrSZpS1RVjLPLYAo7O9x3t2hD/qCOoyK + 2LfHVa9hXnw9zJbtryH2W2PP6sY5DMpL60sbD69PZW5WhR/rPGm1nYW71b7W + nvorU1ghp/8AaQ1/6/zNHGMYxjGMYxjGMYxjGMoX7s707GQniVK88cr9XV/V + JBZjbPOsI/TcSk1hmgi+e6mA89Vnac7ruPJEmebJCJ2RYbirsz6krHNdcuKi + DY5k/B5q6yojlKPvDXVnxpfJWtJped49WXa02gtETS4rak2317ESazbHeunV + pBKHRZdQhdEZVcdjZ9iSB4+ztASn4vkl/wDdpG/8efyO/wDq7n7/AOm8rJiP + TN7crT5p34G4q76cqGkUg9UmHF9+Q6sla+imjoSsW6PnNFmR+97DnNTlblqK + GbVgdF5jW7iWe4rtokUU2H3R6Wagsr226+YJ0rArHrAx3G+pxgVsRZeIzmMO + CfnnhLY8tuyxreRuhtt54m5sTo8MZunv1guZH0q6p7MxjGMYxjGMYxjGMYxn + Pt84DVCSZHQknnFbQG2BKv5m+Rq2mCGWcyryGFGzCvapqmQxkl7aBXBqJMFF + chdN1Eh3IJbdPZTVMlLbbzfWt/4IIJyt8kwvUa3QXCPGrZvTZFLpRP8AxrVT + zHNV9bATtXd8/c+PUzk/5nqfsLaP1/o3oP4/ihv3vCfvJfYlp8yPK3EvBPGh + d+0lwxyg4TdCzoLD9B59W576wetUk/cfsN9gGmSx4v0zX8BD8Zbxx8TT/lT6 + 0Vfq8+mJnBcWo+4ub+C+wg+YeeaavAv5Sa4q5aQUlBnCHj7Q5uFfiPwPEXSR + SQz+TlvsqH7en+pL7Cje6Ipfb9+rskVU+0kor9Cin2091Ptpa/Wqp9Gvu30J + 6fz59Sm38fTpr/Pn1be+efz5/P8AOQOrj5LuP7So2/Oh4zYziNXPMTjJGe7f + ZNDpXFJVCnaLtiTme2FQ5/aQJEWcX939WzIAAE7PL+iUwt/q7sIUIjJihbvg + nSNRQe8awUfSa9sdp9f4efI467xRzdWPcskUN3/QvwwTuIA6eDbGtK5giHjm + 1LBuofireaIQtt3GMre6v+WTh/jWfC1LbloOLjbpIqB6tXVrDpLY8yawCRP2 + CBT+JGm8puj+6zd7o5jtr05gvJbUqm6htpDbt+V5MKg70rnpen4LelSObi8V + 1YrWu7xhxdmF6jDiQKK5GtBXhTJIAm91D3QcW40fz1cXxAvRLQ0BYtvIFLX2 + /jGMYxjGMYxlb/Sjc3u/yEfHi1uoIbm2OFdd0huDa4CoGgHCEQqlklxTAyU1 + RyRl09tk1kFk90ldNttN9NtfffM+r289yTnWkY2XzH5BKWntpdH8vUrvMW+t + Iw9BtTbb12xKtHB5Mi3ujSDIiGVrlriW3CGmDfwtsomiWJ6vut5inLjld0k6 + C675n6qsuFdMs1Nx3mSYQ57KpKI14MkvbDdbxb2MdGAXKTgmqh7w5p1BOXN3 + VR8/I9RTQ++p5t+/dsajkUG4SaYswMkbavPka51I8bGBqBZ2/wAIWb7A+8v4 + G3IDDeLK/Rr91X7X17/Tr9e3v0+ZZfnHp8iXHKCXy013zBCJodB+efljdINY + vU8BZ/CkP30goCTSKcSQgAlInX8Aqb/gquKTgl9SoMskD66KIqDbIDbbAlEo + vHq/pn5Q4I2dkXLw5VXxg1s1NnOdTUFMW+qYgSDEopNfty6ywhRdFZhXoG0D + bVnBoXXDEb2SXx1tbjmoUFJJwwGn/kX6uuScfApL7HtSVwcDoCQ3zCrrEa3V + eFQe7y67sYSv4i9yBnHWDZnU978SbNCBEUkwSpQ6HItLeKG4BN2vm7ezul2+ + Q/6g/wAifRVlpNvPWlHpUdszzpzVEqg10tIZhlSEFUHMUTjy5HmhjO7It+yO + yfqS4C2ifqWyWt4fxP1/e4/OMV6K6A6dsPoOX9aVlS10jx2U7EDw2mm2Rwna + RNsNrtpUczkgxvWWUM4cmcvERzZG9MX7pzVNLJ2X8ri+DN4hCXV3yot9uFNI + fabt1tNlXwCVbhjzsyrRnmQkNyMPTcPfHMmKhvX7ZZwHj2yrQO0awlZfXVt8 + j2+bH7gta4uivlQ5z+OGJdK2nytREsoORXfJpxz5Lm6B2xbEpFcbBQTjEQsP + wFxJaxmXyDFKEitqZaZO6Ev3eWw9QFt3bqsJ/wDID2fFfjg7zjQvSM9lEx4t + 71i1F1R1K2Om4U4sWv8Aaay5rUGkcmb1thpd9wWPCuay5yRShbRJW0RxIcR0 + Qt093s8A7ddPkr04HX+UDrbSE9E8oMPSE7nqLm1pzGOyhQR6KXYKe88U/Epe + NqyEfUn8WuvWNTaNbeRgncpZAR+Gis5/If22N8ONdzz3p6es1xVV8sSPMat4 + EPqqkkk9aNFGSWxEhrFcnFRTeWs6L89oKugsrKdNHNsj7Ug9Fl6De7eWR+2X + cnxwfKpz9T0h7evzq2g+iudbPte8GK9ZSLYLlXXtdQmyJsXZ0BbWQMUCDQ4n + eBEGtDBHGkcXyPiSdqJLkpA7Qc217RbubqmGXLwZ0vTdh9tuXMnTHTYdOqvP + XnT1Z2ey32wp2MPCp2jH+a4fExkaP1jqh722t8iFfnfdE1Bl0S3LWaRnh93L + M5J2h0bYnzsnNXfXS9Nwz4932dWpVkFreXEMyDqW1Nt0yNriRskEXFk7RAwW + mnl2jSKMjmI1EmSFJ1NHI/Vfhm5qy959O1NHvhz+RS57usBy5vu+JySg+too + o8K6V6rOmkqfxaIWy6xwdMRiCkT+AgrLnQlvGbBtDK3W2U2TRcS91rYPg9kX + RVs8gunTfSljTibSbpe157YsDj0rkTk8Ndb1UI9Ex6LxeLtzh79DQ2EOjdI3 + kP0PRFA6Onxn6UE0xEvdrk8YxjIIdc8p3Pedlc+XBQvSTNzjYVCCW82iur9R + oF5N8ja7ebIY1ugu7M5WJABWpVuRiGuyRXu7ruRsf/w0D9F+omPcm4V7ttV2 + qwW9PkXglh1zXt5UpdrpCGLh6OQBxlBlKWZGrLaWNKYN1+OpTDo5uEbQCVcd + Gp01FTX2W3bTtU/RVdg2pxp1WZ0tbPQvNXasV5/RuaIVLF5jC5LyqzXbsqrU + IcuDYXIOSO1wwv0TwjSaO+y4SDEn5576j4qUV9pP3TD1+He3J9P6Mf8AoL5B + oTa0Cpa7oReGkCj/ABbHqxPkT7BtXRNuA9mbZer8S0jrIPBqaiv6V0T823TU + 3CW9T18y2LI6WByZz9aN7U/0vO4B+9u2hBXsKppr/apq2f1QWRjGCPKX9bZ5 + I3xJ9/MHPLT+uSsLwoP936xN0N009tI7dNfFFwX19ZY9v3tRYsisX0FuaXuS + R+YzyBEzJlatk9gWmbjwWTR4OVIIajiDpnOw5D0mAA3tiTom2giiJZX0P8a3 + FHUVSVlR9uUZHza4pbVJGpGaKHvkBXrwLUMJuKaoy5QtzYzxGZ1b28IV4Z1l + yGxz3Cb3EsVR3a2twCwyL/Ej8eEJhFzVvEOb2mNQfoSKwCFW/HGSe2y3AS+P + VisIVDh/fRZ4muwnhnBJObu/RlZlfpY7qnO8uc3xzcnEsqdNcV9EKkryB1VX + zR/X4DWUMi9fQhh/PdHX9JEIYxgxyNNH7R7Ncnpy/WsraEF+e7uJ7oZ9n8g8 + 0otRVdSDfV3xPcEdpy3/ACFflCtT5Yu6Agpc/i8ilkBlTsKAgmIGhIToY9sq + Mm/FCRQBDIkQroWACOgIAQMOlonr4s74muBbbqGoqRmFEIKQqg24pnpoprnV + jtc2gDSabu4mNTZYg8t/vDm1kmKKEKNcjfntu8X+2SmKmSMKshlBfxj8Lmcv + IcZ70CyC84JSICXr18zymfx1d1lraogoNJ3+aR6WNc+kD/t6KIkW6PUoOLOF + DCBMUXCCEHR2yJx3zkD0Qw9XC119q/oxWI9Nsc9/t063/BrcXwnxCOf1ZST7 + wsn7fhZHn7guOEP233P+bpt9On01CfIx8ODDMeOYNzPwVVkYibWt3LGep7Rj + MrsqYFgPXilWziATZ5GerBfpY4aODiOVDm9GOt5rez6ojEliCiL7Gqk2Hc6/ + FlwlyvMJhPqcohqbJfNmRyijo+SuSzKxSwYW7DJBnwqPeT+QyRGPxokJL8Ak + JqSGXNbNv1J5RTWkOGjqKF/B78YsBkbHLI9zbsk/RSxmm0oaaRbN1LaQ6UsL + im7s+kdD1sRIIRiEdUkz1o8uMU0Oy6AWr4K5otjUkFKRj4L5Pja/WpLNVP4a + /dALk3dT7/3mySP8pBu7bNmhxR+guYr6Qj8hvsaZD/crrWIqo/ufuoKJLt7U + qDWR8gXxtW9cVJ82fG1yHX1ZVTwwG86yO17MlMnepjN6nFisv9kjfH4G3TCS + PEufnaTqyKQHiOKi7n4oqMTHniRRJgM/h0u/rSu4nUVdQSqoG16MsJraHxuC + xFpT2+vVujkUaBGNmD9U9812W3QbwR9FV9/PuLq+brKe+777e5m+MYxjGMYx + jGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjGMYxjP//Z + CmVuZHN0cmVhbQplbmRvYmoKeHJlZgowIDEwCjAwMDAwMDAwMDAgNjU1MzUg + ZiAKMDAwMDAwMDAxNCAwMDAwMCBuIAowMDAwMDAwMDcwIDAwMDAwIG4gCjAw + MDAwMDAxMjcgMDAwMDAgbiAKMDAwMDAwMDE3NiAwMDAwMCBuIAowMDAwMDA0 + MTE1IDAwMDAwIG4gCjAwMDAwMDQzMDEgMDAwMDAgbiAKMDAwMDAwNDMzNyAw + MDAwMCBuIAowMDAwMDA0NDM0IDAwMDAwIG4gCjAwMDAwMDQ1MzYgMDAwMDAg + biAKdHJhaWxlcgo8PCAvUm9vdCAzIDAgUgovU2l6ZSAxMAovSW5mbyAxIDAg + Ugo+PgpzdGFydHhyZWYKODQzMwolJUVPRgo= + + + + + + 08155914 + + Parkietje B.V. + + + Brouwerijstraat 26 + Enschede + 7523XD + + NL + + + + NL817575546B01 + + VAT + + + + Parkietje B.V. + 08155914 + + + info@dev.null.moneybird.net + + + + + + + Foobar Holding B.V. + + + Hoofdstraat 12 + Amsterdam + 1234AB + + NL + + + + Foobar Holding B.V. + + + info@example.com + + + + + 30 + 2019-10-15 + RF240000000000000PZQ2DSFF + + NL50TEST0166567191 + + + TESTNL2A + + + + + + We verzoeken u vriendelijk het bovenstaande bedrag van € 363,00 voor 15-10-2019 te voldoen op onze bankrekening onder vermelding van de omschrijving RF24PZQ2DSFF. Voor vragen kunt u contact opnemen per e-mail. + + + 63.0 + + 300.0 + 63.0 + + S + 21.0 + + VAT + + + + + + 300.0 + 300.0 + 363.0 + 0 + 363.0 + + + 1 + 1.0 + 300.0 + + Project X + Project X + + S + 21.0 + + VAT + + + + + 300.0 + + + + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_sales_invoices_id_download_ubl + /{administration_id}/sales_invoices/{id}/duplicate_creditinvoice{format}: + patch: + summary: Duplicate to credit invoice + description: |- + Duplicate a sales invoice to a new credit invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + examples: + CreatesACreditInvoiceForASalesInvoice: + summary: Creates a credit invoice for a sales invoice + value: {} + responses: + '200': + description: Sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + CreatesACreditInvoiceForASalesInvoice: + summary: Creates a credit invoice for a sales invoice + value: + id: '492272917932934275' + administration_id: 123 + contact_id: '492272917728461937' + contact: + id: '492272917728461937' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:20.020Z' + updated_at: '2026-07-10T12:54:20.020Z' + version: 1783688060 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: null + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 2 + state: draft + invoice_date: null + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: null + short_payment_reference: null + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: '492272917767259251' + paused: false + paid_at: null + sent_at: null + created_at: '2026-07-10T12:54:20.215Z' + updated_at: '2026-07-10T12:54:20.221Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688060 + details: + - id: '492272917936080004' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: '**Creditfactuur voor factuur 2026-0001**' + price: '0.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '0.0' + total_price_excl_tax_with_discount_base: '0.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: '' + created_at: '2026-07-10T12:54:20.218Z' + updated_at: '2026-07-10T12:54:20.218Z' + - id: '492272917938177157' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: '-1 x' + amount_decimal: '-1.0' + description: Project X + price: '300.0' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '-300.0' + total_price_excl_tax_with_discount_base: '-300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:20.220Z' + updated_at: '2026-07-10T12:54:20.220Z' + payments: [] + total_paid: '0.0' + total_unpaid: '-363.0' + total_unpaid_base: '-363.0' + prices_are_incl_tax: false + total_price_excl_tax: '-300.0' + total_price_excl_tax_base: '-300.0' + total_price_incl_tax: '-363.0' + total_price_incl_tax_base: '-363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: null + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/4af29626e35fc70137013a1b300900549ed773ddc8a0681ffb11122e5522f984/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/4af29626e35fc70137013a1b300900549ed773ddc8a0681ffb11122e5522f984/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: credit_invoice_created_from_original + link_entity_id: null + link_entity_type: null + data: + original_invoice: 2026-0001 + created_at: '2026-07-10T12:54:20.223Z' + updated_at: '2026-07-10T12:54:20.223Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '-300.0' + taxable_amount_base: '-300.0' + tax_amount: '-63.0' + tax_amount_base: '-63.0' + time_entries: [] + '400': + $ref: '#/components/responses/400_bad_request' + '402': + $ref: '#/components/responses/402_payment_required' + '404': + $ref: '#/components/responses/404_not_found' + operationId: patch_administration_id_sales_invoices_id_duplicate_creditinvoice + /{administration_id}/sales_invoices/{id}/mark_as_dubious{format}: + patch: + summary: Mark as dubious + description: |- + This endpoint marks a sales invoice as dubious. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + dubious_date: + type: string + format: date + required: [] + examples: + MarksTheSalesInvoiceAsDubious: + summary: Marks the sales invoice as dubious + value: {} + responses: + '200': + description: Sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + MarksTheSalesInvoiceAsDubious: + summary: Marks the sales invoice as dubious + value: + id: '492272895224972511' + administration_id: 123 + contact_id: '492272895185126621' + contact: + id: '492272895185126621' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:58.521Z' + updated_at: '2026-07-10T12:53:58.521Z' + version: 1783688038 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF1500000000000006RKAVC6D + short_payment_reference: RF156RKAVC6D + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:53:58.559Z' + updated_at: '2026-07-10T12:53:58.910Z' + public_view_code: '840259' + public_view_code_expires_at: '2026-10-10T12:53:58.613Z' + version: 1783688038 + details: + - id: '492272895228118240' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:58.562Z' + updated_at: '2026-07-10T12:53:58.650Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: '2026-07-10' + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/650cae9dc173aa9aa77002f65a4c4521945a2803e083040308c0146aa923e5c3/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/650cae9dc173aa9aa77002f65a4c4521945a2803e083040308c0146aa923e5c3/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:58.565Z' + updated_at: '2026-07-10T12:53:58.565Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:58.625Z' + updated_at: '2026-07-10T12:53:58.625Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:53:58.669Z' + updated_at: '2026-07-10T12:53:58.669Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_marked_as_dubious + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:58.915Z' + updated_at: '2026-07-10T12:53:58.915Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: patch_administration_id_sales_invoices_id_mark_as_dubious + /{administration_id}/sales_invoices/{id}/mark_as_uncollectible{format}: + patch: + summary: Mark as uncollectible + description: |- + This endpoint marks a sales invoice as uncollectible. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + uncollectible_date: + type: string + format: date + book_method: + type: string + description: Can be `revenue`. + required: [] + examples: + MarksTheSalesInvoiceAsUncollectibleUsingTheUncollectibleRevenue: + summary: Marks the sales invoice as uncollectible using the uncollectible revenue + value: {} + responses: + '200': + description: Sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + MarksTheSalesInvoiceAsUncollectibleUsingTheUncollectibleRevenue: + summary: Marks the sales invoice as uncollectible using the uncollectible revenue + value: + id: '492272897941833180' + administration_id: 123 + contact_id: '492272897901987290' + contact: + id: '492272897901987290' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:01.112Z' + updated_at: '2026-07-10T12:54:01.112Z' + version: 1783688041 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: uncollectible + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF490000000000000E54Q5JCA + short_payment_reference: RF49E54Q5JCA + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:01.150Z' + updated_at: '2026-07-10T12:54:01.697Z' + public_view_code: '735004' + public_view_code_expires_at: '2026-10-10T12:54:01.205Z' + version: 1783688041 + details: + - id: '492272897944978909' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:01.153Z' + updated_at: '2026-07-10T12:54:01.695Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: '2026-07-10' + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/18347937bd9e4f39810938e4c9e7b186e54b54a18bd0f7d941f8b7c23ef0a5a7/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/18347937bd9e4f39810938e4c9e7b186e54b54a18bd0f7d941f8b7c23ef0a5a7/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:01.157Z' + updated_at: '2026-07-10T12:54:01.157Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:01.217Z' + updated_at: '2026-07-10T12:54:01.217Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:01.259Z' + updated_at: '2026-07-10T12:54:01.259Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_uncollectible + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:01.677Z' + updated_at: '2026-07-10T12:54:01.677Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_marked_as_uncollectible + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:01.701Z' + updated_at: '2026-07-10T12:54:01.701Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: patch_administration_id_sales_invoices_id_mark_as_uncollectible + /{administration_id}/sales_invoices/{id}/pause{format}: + post: + summary: Pause sales invoice + description: |- + This endpoint pauses a sales invoice. The automatic workflow steps will not be executed while the sales invoice is paused. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + examples: + PausesTheSalesInvoice: + summary: Pauses the sales invoice + value: {} + responses: + '201': + description: Sales invoice paused + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + PausesTheSalesInvoice: + summary: Pauses the sales invoice + value: + id: '492272889765038031' + administration_id: 123 + contact_id: '492272889716803530' + contact: + id: '492272889716803530' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:53.307Z' + updated_at: '2026-07-10T12:53:53.307Z' + version: 1783688033 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272889720997836' + contact_person: + id: null + contact_id: '492272889716803530' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:53.311Z' + updated_at: '2026-07-10T12:53:53.311Z' + version: 1783688033 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF420000000000000RK9D72CZ + short_payment_reference: RF42RK9D72CZ + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: true + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:53:53.352Z' + updated_at: '2026-07-10T12:53:53.503Z' + public_view_code: '870325' + public_view_code_expires_at: '2026-10-10T12:53:53.408Z' + version: 1783688033 + details: + - id: '492272889768183760' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: 20260701..20260731 + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:53.355Z' + updated_at: '2026-07-10T12:53:53.448Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2099-01-01' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/825731fbcb0049c5a89922ac6a08cd7315859f0cf2f08b689ae5ee0199e26244/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/825731fbcb0049c5a89922ac6a08cd7315859f0cf2f08b689ae5ee0199e26244/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:53.359Z' + updated_at: '2026-07-10T12:53:53.359Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:53.421Z' + updated_at: '2026-07-10T12:53:53.421Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:53:53.468Z' + updated_at: '2026-07-10T12:53:53.468Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_paused + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:53.507Z' + updated_at: '2026-07-10T12:53:53.507Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '404': + $ref: '#/components/responses/404_not_found' + operationId: post_administration_id_sales_invoices_id_pause + /{administration_id}/sales_invoices/{id}/register_payment{format}: + patch: + summary: Register a payment + description: |- + This endpoint is deprecated and should no longer be used. It has been replaced by [Create a payment](#post_sales_invoices_sales_invoice_id_payments). + + ### Required scope(s) + `sales_invoices` + deprecated: true + x-sunset: '2026-12-31' + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + price: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency. Required for foreign currencies. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid financial mutation id. + transaction_identifier: + type: string + manual_payment_action: + type: string + description: Can be `private_payment`, `payment_without_proof`, `cash_payment`, `rounding_error`, `bank_transfer`, `balance_settlement` or `invoices_settlement`. + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + required: + - payment_date + - price + required: [] + examples: + RegistersPayments: + summary: Registers payments + value: + payment: + payment_date: '2026-07-10T12:54:22.004Z' + price: '363.0' + responses: + '200': + description: Sales invoice updated + content: + application/json: + schema: + type: object + additionalProperties: true + examples: + RegistersPayments: + summary: Registers payments + value: + id: '492272919826662696' + administration_id: 123 + invoice_type: SalesInvoice + invoice_id: '492272919659939096' + financial_account_id: null + user_id: '492272801297728613' + payment_transaction_id: null + transaction_identifier: null + price: '363.0' + price_base: '363.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: null + ledger_account_id: '492272802141832323' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:54:22.021Z' + updated_at: '2026-07-10T12:54:22.021Z' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: patch_administration_id_sales_invoices_id_register_payment + /{administration_id}/sales_invoices/{id}/register_payment_creditinvoice{format}: + patch: + summary: Register a payment for a creditinvoice + description: |- + Register a payment for a creditinvoice. Requires that the invoice is a credit invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + examples: + RegistersPaymentsForACreditInvoice: + summary: Registers payments for a credit invoice + value: {} + responses: + '200': + description: Sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + RegistersPaymentsForACreditInvoice: + summary: Registers payments for a credit invoice + value: + id: '492272912449930893' + administration_id: 123 + contact_id: '492272912231827067' + contact: + id: '492272912231827067' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:14.778Z' + updated_at: '2026-07-10T12:54:14.778Z' + version: 1783688054 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0002 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: paid + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF3600000000000007C9P46DY + short_payment_reference: RF367C9P46DY + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: '492272912272721533' + paused: false + paid_at: '2026-07-10' + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:14.986Z' + updated_at: '2026-07-10T12:54:15.166Z' + public_view_code: '483833' + public_view_code_expires_at: '2026-10-10T12:54:15.052Z' + version: 1783688055 + details: + - id: '492272912453076622' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: '**Creditfactuur voor factuur 2026-0001**' + price: '0.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '0.0' + total_price_excl_tax_with_discount_base: '0.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: '' + created_at: '2026-07-10T12:54:14.990Z' + updated_at: '2026-07-10T12:54:15.096Z' + - id: '492272912455173775' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: '-1 x' + amount_decimal: '-1.0' + description: Project X + price: '300.0' + period: null + row_order: 2 + total_price_excl_tax_with_discount: '-300.0' + total_price_excl_tax_with_discount_base: '-300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:14.992Z' + updated_at: '2026-07-10T12:54:15.098Z' + payments: + - id: '492272912622945949' + administration_id: 123 + invoice_type: SalesInvoice + invoice_id: '492272912449930893' + financial_account_id: null + user_id: '492272801297728613' + payment_transaction_id: null + transaction_identifier: null + price: '-363.0' + price_base: '-363.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: null + ledger_account_id: '492272802141832326' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:54:15.152Z' + updated_at: '2026-07-10T12:54:15.152Z' + total_paid: '-363.0' + total_unpaid: '0.0' + total_unpaid_base: '0.0' + prices_are_incl_tax: false + total_price_excl_tax: '-300.0' + total_price_excl_tax_base: '-300.0' + total_price_incl_tax: '-363.0' + total_price_incl_tax_base: '-363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/ed3e5213ecde4483e8120823a80e52840448d1c54916161a1c8a4136f00b7189/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/ed3e5213ecde4483e8120823a80e52840448d1c54916161a1c8a4136f00b7189/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: credit_invoice_created_from_original + link_entity_id: null + link_entity_type: null + data: + original_invoice: 2026-0001 + created_at: '2026-07-10T12:54:14.995Z' + updated_at: '2026-07-10T12:54:14.995Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:15.066Z' + updated_at: '2026-07-10T12:54:15.066Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0002 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:15.118Z' + updated_at: '2026-07-10T12:54:15.118Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_paid + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:15.155Z' + updated_at: '2026-07-10T12:54:15.155Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '-300.0' + taxable_amount_base: '-300.0' + tax_amount: '-63.0' + tax_amount_base: '-63.0' + time_entries: [] + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: patch_administration_id_sales_invoices_id_register_payment_creditinvoice + /{administration_id}/sales_invoices/{id}/resume{format}: + post: + summary: Resume sales invoice + description: |- + This endpoint resumes the sales invoice. The automatic workflow steps will execute again after resuming. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + examples: + ResumesTheSalesInvoice: + summary: Resumes the sales invoice + value: {} + responses: + '201': + description: Sales invoice resumed + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + ResumesTheSalesInvoice: + summary: Resumes the sales invoice + value: + id: '492272912838952617' + administration_id: 123 + contact_id: '492272912787572388' + contact: + id: '492272912787572388' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:15.308Z' + updated_at: '2026-07-10T12:54:15.308Z' + version: 1783688055 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272912791766694' + contact_person: + id: null + contact_id: '492272912787572388' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:15.313Z' + updated_at: '2026-07-10T12:54:15.313Z' + version: 1783688055 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF920000000000000U6KNZXKK + short_payment_reference: RF92U6KNZXKK + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:15.357Z' + updated_at: '2026-07-10T12:54:15.533Z' + public_view_code: '269417' + public_view_code_expires_at: '2026-10-10T12:54:15.416Z' + version: 1783688055 + details: + - id: '492272912842098346' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: 20260701..20260731 + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:15.360Z' + updated_at: '2026-07-10T12:54:15.459Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/50590b69c503bd0c7d4bdef23c8b4ff9b5980d480c069f870b5a1ec7dae25085/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/50590b69c503bd0c7d4bdef23c8b4ff9b5980d480c069f870b5a1ec7dae25085/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:15.364Z' + updated_at: '2026-07-10T12:54:15.364Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:15.431Z' + updated_at: '2026-07-10T12:54:15.431Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:15.481Z' + updated_at: '2026-07-10T12:54:15.481Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_unpaused + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:15.537Z' + updated_at: '2026-07-10T12:54:15.537Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '404': + $ref: '#/components/responses/404_not_found' + operationId: post_administration_id_sales_invoices_id_resume + /{administration_id}/sales_invoices/{id}/send_invoice{format}: + patch: + summary: Sends an invoice + description: |- + This endpoint provides two options: sending the invoice and scheduling sending in the future. When sending + now, you can provide a send method, email address and message. If you don't provide any arguments, the defaults + from the contact and workflow will be used. If you have sent the invoice before, then the settings from + the previous sending are used instead of the defaults. + + When scheduling sending, set the boolean `sending_scheduled` to true and provide an `invoice_date`. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + sales_invoice_sending: + type: object + unevaluatedProperties: false + properties: + delivery_method: + type: string + enum: + - Email + - Peppol + - Manual + sending_scheduled: + type: + - boolean + - string + default: false + description: Schedule the invoice to be sent in the future instead of immediately. Combine with `invoice_date` to set the date on which it is sent. + deliver_ubl: + type: + - boolean + - string + description: Attach a UBL (e-invoicing) file to the email. Only used when `delivery_method` is `Email`; defaults to the contact's UBL preference. + mergeable: + type: + - boolean + - string + default: false + description: When multiple scheduled invoices share the same contact, identity, workflow, document style, currency, language and invoice date, merge them into a single invoice before sending. + email_address: + type: string + description: Recipient email address. Only used when `delivery_method` is `Email`; overrides the contact's default email address. + email_message: + type: string + description: Message included in the email. Only used when `delivery_method` is `Email`; defaults to the workflow's invoice email text. + invoice_date: + type: string + format: date + description: When scheduling, the date on which the invoice is sent. + required: [] + required: [] + examples: + SendsAnInvoice: + summary: Sends an invoice + value: {} + SendsAnInvoiceWithAlternativeInformation: + summary: Sends an invoice with alternative information + value: + sales_invoice_sending: + delivery_method: Email + email_address: alternative@example.com + email_message: Hi, this is my invoice with id {invoice_id}! + SendsAnInvoiceViaMailWithAnUblAttachment: + summary: Sends an invoice via mail with an ubl attachment + value: + sales_invoice_sending: + delivery_method: Email + deliver_ubl: true + email_address: alternative@example.com + ScheduleSending: + summary: Schedule sending + value: + sales_invoice_sending: + sending_scheduled: true + invoice_date: '2026-07-11' + FallsBackToE-mailDeliveryWhenSendingSimplerinvoicingForTheSecondTime: + summary: Falls back to e-mail delivery when sending simplerinvoicing for the second time + value: {} + responses: + '200': + description: Sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + SendsAnInvoice: + summary: Sends an invoice + value: + id: '492272898985166381' + administration_id: 123 + contact_id: '492272898945320491' + contact: + id: '492272898945320491' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:02.107Z' + updated_at: '2026-07-10T12:54:02.107Z' + version: 1783688042 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF510000000000000A4GXUA6X + short_payment_reference: RF51A4GXUA6X + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:02.144Z' + updated_at: '2026-07-10T12:54:02.246Z' + public_view_code: '377358' + public_view_code_expires_at: '2026-10-10T12:54:02.208Z' + version: 1783688042 + details: + - id: '492272898988312110' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:02.148Z' + updated_at: '2026-07-10T12:54:02.245Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/a11ef82a3187224aa524f59874555df9d0e765d1847a34c1459fb5efa21f0150/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/a11ef82a3187224aa524f59874555df9d0e765d1847a34c1459fb5efa21f0150/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:02.151Z' + updated_at: '2026-07-10T12:54:02.151Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:02.220Z' + updated_at: '2026-07-10T12:54:02.220Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:02.263Z' + updated_at: '2026-07-10T12:54:02.263Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + SendsAnInvoiceWithAlternativeInformation: + summary: Sends an invoice with alternative information + value: + id: '492272899469608526' + administration_id: 123 + contact_id: '492272899430811212' + contact: + id: '492272899430811212' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:02.570Z' + updated_at: '2026-07-10T12:54:02.570Z' + version: 1783688042 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF280000000000000VU6T7YAH + short_payment_reference: RF28VU6T7YAH + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:02.607Z' + updated_at: '2026-07-10T12:54:02.705Z' + public_view_code: '641809' + public_view_code_expires_at: '2026-10-10T12:54:02.668Z' + version: 1783688042 + details: + - id: '492272899471705679' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:02.610Z' + updated_at: '2026-07-10T12:54:02.704Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/425ef1ddb7d69fe6c3c4b1969769d9dd73730820d280b78daead7985f52ca435/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/425ef1ddb7d69fe6c3c4b1969769d9dd73730820d280b78daead7985f52ca435/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:02.613Z' + updated_at: '2026-07-10T12:54:02.613Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:02.680Z' + updated_at: '2026-07-10T12:54:02.680Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: alternative@example.com + email_message: Hi, this is my invoice with id {invoice_id}! + created_at: '2026-07-10T12:54:02.722Z' + updated_at: '2026-07-10T12:54:02.722Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + SendsAnInvoiceViaMailWithAnUblAttachment: + summary: Sends an invoice via mail with an ubl attachment + value: + id: '492272899702392417' + administration_id: 123 + contact_id: '492272899663595103' + contact: + id: '492272899663595103' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:02.792Z' + updated_at: '2026-07-10T12:54:02.792Z' + version: 1783688042 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF640000000000000YHWQ7XRT + short_payment_reference: RF64YHWQ7XRT + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:02.828Z' + updated_at: '2026-07-10T12:54:02.926Z' + public_view_code: '300604' + public_view_code_expires_at: '2026-10-10T12:54:02.887Z' + version: 1783688042 + details: + - id: '492272899704489570' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:02.831Z' + updated_at: '2026-07-10T12:54:02.925Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/b800c25f9ecb1a7264b705450d90b99a4f5b3c5a92cca1db45e60c656cde1029/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/b800c25f9ecb1a7264b705450d90b99a4f5b3c5a92cca1db45e60c656cde1029/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:02.835Z' + updated_at: '2026-07-10T12:54:02.835Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:02.900Z' + updated_at: '2026-07-10T12:54:02.900Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: alternative@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:02.945Z' + updated_at: '2026-07-10T12:54:02.945Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + ScheduleSending: + summary: Schedule sending + value: + id: '492272899993896570' + administration_id: 123 + contact_id: '492272899956147832' + contact: + id: '492272899956147832' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:03.071Z' + updated_at: '2026-07-10T12:54:03.071Z' + version: 1783688043 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: null + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 1 + state: scheduled + invoice_date: '2026-07-11' + due_date: '2026-07-25' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: null + short_payment_reference: null + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: null + created_at: '2026-07-10T12:54:03.107Z' + updated_at: '2026-07-10T12:54:03.174Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688043 + details: + - id: '492272899997042299' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:03.110Z' + updated_at: '2026-07-10T12:54:03.173Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: null + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/f32a1a2df3a5c7ff32ea944e6c61b51eff68e113dc35748a07525d4ec16190bc/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/f32a1a2df3a5c7ff32ea944e6c61b51eff68e113dc35748a07525d4ec16190bc/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:03.113Z' + updated_at: '2026-07-10T12:54:03.113Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_scheduled + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:03.162Z' + updated_at: '2026-07-10T12:54:03.162Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + FallsBackToE-mailDeliveryWhenSendingSimplerinvoicingForTheSecondTime: + summary: Falls back to e-mail delivery when sending simplerinvoicing for the second time + value: + id: '492272900324198025' + administration_id: 123 + contact_id: '492272900171105919' + contact: + id: '492272900171105919' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Simplerinvoicing + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '12345678' + si_identifier_type: NL:KVK + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:03.276Z' + updated_at: '2026-07-10T12:54:03.384Z' + version: 1783688043 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF52000000000000062A3KYUN + short_payment_reference: RF5262A3KYUN + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:03.422Z' + updated_at: '2026-07-10T12:54:03.612Z' + public_view_code: '862023' + public_view_code_expires_at: '2026-10-10T12:54:03.611Z' + version: 1783688043 + details: + - id: '492272900327343754' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:03.425Z' + updated_at: '2026-07-10T12:54:03.537Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/1c49efbf22f2d5d62cec42c237f82f02c1b7fe601675adb873f9795b77b8841a/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/1c49efbf22f2d5d62cec42c237f82f02c1b7fe601675adb873f9795b77b8841a/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:03.429Z' + updated_at: '2026-07-10T12:54:03.429Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:03.511Z' + updated_at: '2026-07-10T12:54:03.511Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_si + link_entity_id: null + link_entity_type: null + data: + si_identifier: NL:KVK:12345678 + created_at: '2026-07-10T12:54:03.557Z' + updated_at: '2026-07-10T12:54:03.557Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:03.625Z' + updated_at: '2026-07-10T12:54:03.625Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsErrorWhenSendingInvalidInvoiceWithoutDetails: + summary: Returns error when sending invalid invoice without details + value: + error: details cannot be empty + symbolic: + sales_invoice: details_cannot_be_empty + '404': + $ref: '#/components/responses/404_not_found' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsErrorWhenSendingInvoiceFromIdentityWithoutEmail: + summary: Returns error when sending invoice from identity without email + value: + error: + delivery_method: + - The sender address must contain an email address + details: + delivery_method: + - error: need_identity_email + ReturnsErrorWhenSendingInvoiceToContactWithoutEmailAddress: + summary: Returns error when sending invoice to contact without email address + value: + error: + email_address: + - can't be blank + details: + email_address: + - error: blank + operationId: patch_administration_id_sales_invoices_id_send_invoice + /{administration_id}/sales_invoices/{id}{format}: + get: + summary: Get an invoice by id + description: |- + Returns a sales invoices in the administration. + + Note that the link in the `url` attribute will only work if viewing invoices online has been enabled and the invoice is not a draft. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A sales invoice + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + ReturnsInvoiceByGivenId: + summary: Returns invoice by given id + value: + id: '492272889099192205' + administration_id: 123 + contact_id: '492272889048860552' + contact: + id: '492272889048860552' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:53:52.669Z' + updated_at: '2026-07-10T12:53:52.669Z' + version: 1783688032 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272889053054858' + contact_person: + id: null + contact_id: '492272889048860552' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:53:52.673Z' + updated_at: '2026-07-10T12:53:52.673Z' + version: 1783688032 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF360000000000000EA7646Y7 + short_payment_reference: RF36EA7646Y7 + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:53:52.717Z' + updated_at: '2026-07-10T12:53:52.817Z' + public_view_code: '937148' + public_view_code_expires_at: '2026-10-10T12:53:52.772Z' + version: 1783688032 + details: + - id: '492272889101289358' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: 20260701..20260731 + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:53:52.720Z' + updated_at: '2026-07-10T12:53:52.816Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/87f3887855c6aaada7b885aab8a64bb13f3fe4be994a62651852185ea21fe01f/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/87f3887855c6aaada7b885aab8a64bb13f3fe4be994a62651852185ea21fe01f/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:52.723Z' + updated_at: '2026-07-10T12:53:52.723Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:52.785Z' + updated_at: '2026-07-10T12:53:52.785Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:53:52.834Z' + updated_at: '2026-07-10T12:53:52.834Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenInvoiceDoesNotExist: + summary: Returns 404 when invoice does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_sales_invoices_id + patch: + summary: Update a sales invoice + description: |- + When updating a sales invoice, provide only the attributes you want to update. The other attributes will not be changed. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + sales_invoice: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: The ID of the contact associated with the sales invoice. This is mandatory when setting the contact_person_id. Should be a valid contact id. + contact_person_id: + $ref: '#/components/schemas/identifier' + description: The ID of the contact person associated with the sales invoice. Should be a valid contact person id. + update_contact: + type: + - boolean + - string + description: When `true`, the contact's address and other details are updated on the invoice from the current contact record. + original_estimate_id: + $ref: '#/components/schemas/identifier' + description: The ID of the estimate this invoice was created from. Used to link an invoice to its originating estimate. + document_style_id: + $ref: '#/components/schemas/identifier' + description: Default document style is used if value is not provided. Should be a valid document style id. + workflow_id: + $ref: '#/components/schemas/identifier' + description: If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. + reference: + type: string + description: Your own reference for this invoice, e.g. a project code or PO number. Visible to the recipient. + invoice_sequence_id: + type: string + description: The ID of the numbering sequence to use for the invoice number. + remove_invoice_sequence_id: + type: + - boolean + - string + description: Set to `true` to remove the assigned numbering sequence, reverting to the administration default. + invoice_date: + type: string + description: The date of the invoice. + format: date + first_due_interval: + type: integer + description: The number of days after the invoice date before the invoice is due. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the invoice are inclusive of tax. + payment_conditions: + type: string + description: Free-text payment conditions printed on the invoice, e.g. "Payment within 30 days". + discount: + $ref: '#/components/schemas/number' + description: Discount percentage applied to the entire invoice, e.g. `10.0` for 10%. + time_entry_ids: + type: array + description: An array of time entry IDs to associate with this invoice. Linked time entries will be marked as invoiced. + items: + $ref: '#/components/schemas/identifier' + details_attributes: + $ref: '#/components/schemas/details_attributes' + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + required: [] + examples: + AddingAndRemovingASalesInvoiceDetail: + summary: Adding and removing a sales invoice detail + value: + sales_invoice: + details_attributes: + - description: Sofa + price: 199.99 + - id: 492272915529598850 + _destroy: true + UpdatingTheSalesInvoiceReference: + summary: Updating the sales invoice reference + value: + sales_invoice: + reference: '30053' + responses: + '200': + description: Sales invoice updated + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + AddingAndRemovingASalesInvoiceDetail: + summary: Adding and removing a sales invoice detail + value: + id: '492272915526453139' + administration_id: 123 + contact_id: '492272915485558673' + contact: + id: '492272915485558673' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:17.881Z' + updated_at: '2026-07-10T12:54:17.881Z' + version: 1783688057 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF2800000000000004CMRXEUA + short_payment_reference: RF284CMRXEUA + reference: '30052' + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:17.920Z' + updated_at: '2026-07-10T12:54:18.107Z' + public_view_code: '844406' + public_view_code_expires_at: '2026-10-10T12:54:17.978Z' + version: 1783688058 + details: + - id: '492272915721488291' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Sofa + price: '199.99' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '199.99' + total_price_excl_tax_with_discount_base: '199.99' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:18.106Z' + updated_at: '2026-07-10T12:54:18.106Z' + payments: [] + total_paid: '0.0' + total_unpaid: '241.99' + total_unpaid_base: '241.99' + prices_are_incl_tax: false + total_price_excl_tax: '199.99' + total_price_excl_tax_base: '199.99' + total_price_incl_tax: '241.99' + total_price_incl_tax_base: '241.99' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/39947d7bb3cc9895ad5173d6609c813d875be48533db2e3d661ee34b012c384f/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/39947d7bb3cc9895ad5173d6609c813d875be48533db2e3d661ee34b012c384f/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:17.927Z' + updated_at: '2026-07-10T12:54:17.927Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:17.991Z' + updated_at: '2026-07-10T12:54:17.991Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:18.036Z' + updated_at: '2026-07-10T12:54:18.036Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_updated + link_entity_id: null + link_entity_type: null + data: + changes: + total_price_excl_tax: + - '300.0' + - '199.99' + total_price_excl_tax_base: + - '300.0' + - '199.99' + total_price_incl_tax: + - '363.0' + - '241.99' + total_price_incl_tax_base: + - '363.0' + - '241.99' + cached_taxes: + - - debit: 0 + credit: '63.0' + payable: true + tax_rate_id: '492272802314847370' + report_reference: NL/1a + - - tax_rate_id: '492272802314847370' + report_reference: NL/1a + payable: true + debit: 0 + credit: '42.0' + updated_at: + - '2026-07-10T14:54:18.019+02:00' + - '2026-07-10T14:54:18.100+02:00' + created_at: '2026-07-10T12:54:18.109Z' + updated_at: '2026-07-10T12:54:18.109Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '199.99' + taxable_amount_base: '199.99' + tax_amount: '42.0' + tax_amount_base: '42.0' + time_entries: [] + UpdatingTheSalesInvoiceReference: + summary: Updating the sales invoice reference + value: + id: '492272916882261012' + administration_id: 123 + contact_id: '492272916843463698' + contact: + id: '492272916843463698' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:19.176Z' + updated_at: '2026-07-10T12:54:19.176Z' + version: 1783688059 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF880000000000000WCSF4WSW + short_payment_reference: RF88WCSF4WSW + reference: '30053' + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:19.213Z' + updated_at: '2026-07-10T12:54:19.369Z' + public_view_code: '503943' + public_view_code_expires_at: '2026-10-10T12:54:19.266Z' + version: 1783688059 + details: + - id: '492272916885406741' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:19.216Z' + updated_at: '2026-07-10T12:54:19.303Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/84bde7dafcd93de6e6257853523a0902928a32d70fe540e822b656f5c93437af/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/84bde7dafcd93de6e6257853523a0902928a32d70fe540e822b656f5c93437af/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:19.219Z' + updated_at: '2026-07-10T12:54:19.219Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:19.278Z' + updated_at: '2026-07-10T12:54:19.278Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:19.322Z' + updated_at: '2026-07-10T12:54:19.322Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_updated + link_entity_id: null + link_entity_type: null + data: + changes: + reference: + - '30052' + - '30053' + updated_at: + - '2026-07-10T14:54:19.305+02:00' + - '2026-07-10T14:54:19.369+02:00' + created_at: '2026-07-10T12:54:19.373Z' + updated_at: '2026-07-10T12:54:19.373Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: patch_administration_id_sales_invoices_id + delete: + summary: Delete a sales invoice + description: |- + Delete a sales invoice. Requires that the sales invoice has no pending payments and is not in a locked bookkeeping period. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Sales invoice deleted + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_sales_invoices_id + /{administration_id}/sales_invoices/{sales_invoice_id}/attachments/{id}/download{format}: + get: + summary: Download attachment + description: |- + Download the attachment. The response will be a redirect to a temporarily available URL + where the attachment can be downloaded. Use the `Location` header in the response + to download the attachment. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '302': + description: Found + content: + text/plain: + schema: + type: string + examples: + DownloadsTheAttachment: + summary: Downloads the attachment + value: '{"message":"Use the Location header to download the attachment"}' + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_sales_invoices_sales_invoice_id_attachments_id_download + /{administration_id}/sales_invoices/{sales_invoice_id}/attachments/{id}{format}: + delete: + summary: Delete an attachment + description: |- + Deletes an attachment of an attachable. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Attachment deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_sales_invoices_sales_invoice_id_attachments_id + /{administration_id}/sales_invoices/{sales_invoice_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from the sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400StatusWhenUserHasNoPermissionsToNotes: + summary: Returns a 400 status when user has no permissions to notes + value: + error: User has no permissions to notes for SalesInvoice + symbolic: + user: insufficient_permissions + operationId: delete_administration_id_sales_invoices_sales_invoice_id_notes_id + /{administration_id}/sales_invoices/{sales_invoice_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + type: + - integer + - string + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492272892428420160 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492272892449391689' + administration_id: 123 + entity_id: '492272892288959543' + entity_type: SalesInvoice + user_id: '492272801297728613' + assignee_id: '492272892428420167' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:53:55.912Z' + updated_at: '2026-07-10T12:53:55.912Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400StatusWhenUserHasNoPermissionsToNotes: + summary: Returns a 400 status when user has no permissions to notes + value: + error: User has no permissions to notes for SalesInvoice + symbolic: + user: insufficient_permissions + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422StatusWhenTheNoteIsNotValid: + summary: Returns a 422 status when the note is not valid + value: + error: + note: + - can't be blank + todo_type: + - can't be blank + details: + note: + - error: blank + todo_type: + - error: blank + operationId: post_administration_id_sales_invoices_sales_invoice_id_notes + /{administration_id}/sales_invoices/{sales_invoice_id}/payments/{id}{format}: + delete: + summary: Delete a payment + description: |- + Delete a payment from a sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Payment deleted + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_sales_invoices_sales_invoice_id_payments_id + /{administration_id}/sales_invoices/{sales_invoice_id}/payments{format}: + post: + summary: Create a payment + description: |- + Registers a payment for a sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: sales_invoice_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + description: The date on which the payment was made. + price: + $ref: '#/components/schemas/number' + description: The amount paid in the document's currency. Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. + transaction_identifier: + type: string + description: An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. + manual_payment_action: + type: string + description: Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + description: The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). + required: + - payment_date + - price + required: [] + examples: + CreateAPayment: + summary: Create a payment + value: + payment: + payment_date: '2026-07-10T12:54:23.004Z' + price: '363.0' + responses: + '201': + description: Payment created + content: + application/json: + schema: + $ref: '#/components/schemas/payment_response' + examples: + CreateAPayment: + summary: Create a payment + value: + id: '492272920873141642' + administration_id: 123 + invoice_type: SalesInvoice + invoice_id: '492272920722146682' + financial_account_id: null + user_id: '492272801297728613' + payment_transaction_id: null + transaction_identifier: null + price: '363.0' + price_base: '363.0' + payment_date: '2026-07-10' + credit_invoice_id: null + financial_mutation_id: null + ledger_account_id: '492272802141832323' + linked_payment_id: null + manual_payment_action: null + created_at: '2026-07-10T12:54:23.019Z' + updated_at: '2026-07-10T12:54:23.019Z' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_sales_invoices_sales_invoice_id_payments + /{administration_id}/sales_invoices{format}: + get: + summary: List all invoices + description: |- + Returns a paginated list of sales invoices in the administration. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | - | - | - | - | + | state | `String` | `all` | `all`, `draft`, `open`, `scheduled`, `pending_payment`, `late`, `reminded`, `paid` or `uncollectible` | + | period | `String` | `this_year` | A period description (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | + | reference | `String` | | Select invoices with a certain reference | + | contact_id | `Integer` | | Select invoices belonging to a certain contact | + | recurring_sales_invoice_id | `Integer` | | Select invoices created by a certain recurring invoice | + | workflow_id | `Integer` | | Select invoices that use a certain workflow | + | created_after | `String` | | Select invoices created after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | + | updated_after | `String` | | Select invoices updated after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | + + You can filter by multiple states at the same time by separating the values with a pipe (`state:draft|scheduled`). This also holds for the reference. + schema: + type: string + default: period:this_year + examples: + ReturnsAnEmptyListWhenFilterContactIdDoesNotMatchAnyContact: + summary: Returns an empty list when filter contact id does not match any contact + value: contact_id:123 + ReturnsAllInvoicesFilteredOnState: + summary: Returns all invoices filtered on state + value: state:late + ReturnsAllInvoicesFilteredOnPeriod: + summary: Returns all invoices filtered on period + value: period:this_month + ReturnsOnlySalesInvoicesUpdatedAfterGivenDatetime: + summary: Returns only sales invoices updated after given datetime + value: updated_after:2026-07-10 12:54:18 UTC + ReturnsAllSalesInvoicesCreatedAfterGivenDatetime: + summary: Returns all sales invoices created after given datetime + value: created_after:2026-07-09 12:54:13 UTC + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of sales invoices + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/sales_invoice_response' + examples: + ReturnsAnEmptyListWhenFilterContactIdDoesNotMatchAnyContact: + summary: Returns an empty list when filter contact id does not match any contact + value: [] + ReturnsAllInvoicesFilteredOnState: + summary: Returns all invoices filtered on state + value: [] + ReturnsAllInvoicesFilteredOnPeriod: + summary: Returns all invoices filtered on period + value: + - id: '492272908092048653' + administration_id: 123 + contact_id: '492272907684152553' + contact: + id: '492272907684152553' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:10.441Z' + updated_at: '2026-07-10T12:54:10.441Z' + version: 1783688050 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0003 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF110000000000000HVCCXPE7 + short_payment_reference: RF11HVCCXPE7 + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:10.830Z' + updated_at: '2026-07-10T12:54:10.926Z' + public_view_code: '978496' + public_view_code_expires_at: '2026-10-10T12:54:10.886Z' + version: 1783688050 + details: + - id: '492272908095194382' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:10.833Z' + updated_at: '2026-07-10T12:54:10.924Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/c3984f698eac14ec8d55d1a642f398c58e9c37c28a9d223b5a33f9caca53fb26/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/c3984f698eac14ec8d55d1a642f398c58e9c37c28a9d223b5a33f9caca53fb26/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:10.837Z' + updated_at: '2026-07-10T12:54:10.837Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:10.900Z' + updated_at: '2026-07-10T12:54:10.900Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0003 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:10.944Z' + updated_at: '2026-07-10T12:54:10.944Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + - id: '492272907920082174' + administration_id: 123 + contact_id: '492272907684152553' + contact: + id: '492272907684152553' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:10.441Z' + updated_at: '2026-07-10T12:54:10.441Z' + version: 1783688050 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0002 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF500000000000000SSHHPCJS + short_payment_reference: RF50SSHHPCJS + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:10.666Z' + updated_at: '2026-07-10T12:54:10.764Z' + public_view_code: '961544' + public_view_code_expires_at: '2026-10-10T12:54:10.724Z' + version: 1783688050 + details: + - id: '492272907923227903' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:10.669Z' + updated_at: '2026-07-10T12:54:10.763Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/8d085bbfada27e28a5feb76cec839d6e527752391a9e51db91b98d9104f8c6f2/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/8d085bbfada27e28a5feb76cec839d6e527752391a9e51db91b98d9104f8c6f2/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:10.673Z' + updated_at: '2026-07-10T12:54:10.673Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:10.738Z' + updated_at: '2026-07-10T12:54:10.738Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0002 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:10.783Z' + updated_at: '2026-07-10T12:54:10.783Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + - id: '492272907739727086' + administration_id: 123 + contact_id: '492272907684152553' + contact: + id: '492272907684152553' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:10.441Z' + updated_at: '2026-07-10T12:54:10.441Z' + version: 1783688050 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272907689395435' + contact_person: + id: null + contact_id: '492272907684152553' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:10.446Z' + updated_at: '2026-07-10T12:54:10.446Z' + version: 1783688050 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF7600000000000004JHZ99HW + short_payment_reference: RF764JHZ99HW + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:10.494Z' + updated_at: '2026-07-10T12:54:10.599Z' + public_view_code: '333290' + public_view_code_expires_at: '2026-10-10T12:54:10.556Z' + version: 1783688050 + details: + - id: '492272907742872815' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: 20260701..20260731 + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:10.497Z' + updated_at: '2026-07-10T12:54:10.597Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/6a8332058034f55b5a308a4209158859580020184ba81bcb15068dd01efc67eb/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/6a8332058034f55b5a308a4209158859580020184ba81bcb15068dd01efc67eb/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:10.502Z' + updated_at: '2026-07-10T12:54:10.502Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:10.569Z' + updated_at: '2026-07-10T12:54:10.569Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:10.617Z' + updated_at: '2026-07-10T12:54:10.617Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + ReturnsPaginatedSalesInvoicesOnPage1: + summary: Returns paginated sales invoices on page 1 + value: + - id: '492272908676105537' + administration_id: 123 + contact_id: '492272908301763869' + contact: + id: '492272908301763869' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:11.030Z' + updated_at: '2026-07-10T12:54:11.030Z' + version: 1783688051 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0003 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF240000000000000CCU42665 + short_payment_reference: RF24CCU42665 + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:11.387Z' + updated_at: '2026-07-10T12:54:11.484Z' + public_view_code: '792508' + public_view_code_expires_at: '2026-10-10T12:54:11.443Z' + version: 1783688051 + details: + - id: '492272908678202690' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:11.390Z' + updated_at: '2026-07-10T12:54:11.483Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/e095a21df6802654a6f731c83494b3940f3089aaeed4517e2e4a73e450a03d64/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/e095a21df6802654a6f731c83494b3940f3089aaeed4517e2e4a73e450a03d64/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:11.393Z' + updated_at: '2026-07-10T12:54:11.393Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:11.458Z' + updated_at: '2026-07-10T12:54:11.458Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0003 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:11.503Z' + updated_at: '2026-07-10T12:54:11.503Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + ReturnsAllInvoicesOfAnAdministration: + summary: Returns all invoices of an administration + value: + - id: '492272909779207593' + administration_id: 123 + contact_id: '492272909400671621' + contact: + id: '492272909400671621' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:12.078Z' + updated_at: '2026-07-10T12:54:12.078Z' + version: 1783688052 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0003 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF160000000000000JR72A4UX + short_payment_reference: RF16JR72A4UX + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:12.438Z' + updated_at: '2026-07-10T12:54:12.539Z' + public_view_code: '618764' + public_view_code_expires_at: '2026-10-10T12:54:12.494Z' + version: 1783688052 + details: + - id: '492272909781304746' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:12.441Z' + updated_at: '2026-07-10T12:54:12.538Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/583e52c03d3e3db018dfcbee3b219e99f409b89290987136fd5c69c5f7a253ba/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/583e52c03d3e3db018dfcbee3b219e99f409b89290987136fd5c69c5f7a253ba/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.445Z' + updated_at: '2026-07-10T12:54:12.445Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.508Z' + updated_at: '2026-07-10T12:54:12.508Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0003 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:12.557Z' + updated_at: '2026-07-10T12:54:12.557Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + - id: '492272909616678298' + administration_id: 123 + contact_id: '492272909400671621' + contact: + id: '492272909400671621' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:12.078Z' + updated_at: '2026-07-10T12:54:12.078Z' + version: 1783688052 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0002 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF0900000000000006A3KX5Y7 + short_payment_reference: RF096A3KX5Y7 + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:12.284Z' + updated_at: '2026-07-10T12:54:12.374Z' + public_view_code: '406648' + public_view_code_expires_at: '2026-10-10T12:54:12.337Z' + version: 1783688052 + details: + - id: '492272909618775451' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:12.287Z' + updated_at: '2026-07-10T12:54:12.373Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/16463e545ec9456fa55e657660267aadf3fb977eaba939359c1c123a891b9140/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/16463e545ec9456fa55e657660267aadf3fb977eaba939359c1c123a891b9140/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.290Z' + updated_at: '2026-07-10T12:54:12.290Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.350Z' + updated_at: '2026-07-10T12:54:12.350Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0002 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:12.392Z' + updated_at: '2026-07-10T12:54:12.392Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + - id: '492272909449954698' + administration_id: 123 + contact_id: '492272909400671621' + contact: + id: '492272909400671621' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:12.078Z' + updated_at: '2026-07-10T12:54:12.078Z' + version: 1783688052 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272909404865927' + contact_person: + id: null + contact_id: '492272909400671621' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:12.082Z' + updated_at: '2026-07-10T12:54:12.082Z' + version: 1783688052 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF050000000000000DUVJRQJK + short_payment_reference: RF05DUVJRQJK + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:12.125Z' + updated_at: '2026-07-10T12:54:12.220Z' + public_view_code: '758591' + public_view_code_expires_at: '2026-10-10T12:54:12.180Z' + version: 1783688052 + details: + - id: '492272909453100427' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: 20260701..20260731 + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:12.128Z' + updated_at: '2026-07-10T12:54:12.219Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/988e6ecea7b79f1a2630480873549abd052518d62a83568fe9ab0f4a8a3daba6/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/988e6ecea7b79f1a2630480873549abd052518d62a83568fe9ab0f4a8a3daba6/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.132Z' + updated_at: '2026-07-10T12:54:12.132Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.193Z' + updated_at: '2026-07-10T12:54:12.193Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:12.238Z' + updated_at: '2026-07-10T12:54:12.238Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + ReturnsOnlySalesInvoicesUpdatedAfterGivenDatetime: + summary: Returns only sales invoices updated after given datetime + value: + - id: '492272910041351614' + administration_id: 123 + contact_id: '492272909994165689' + contact: + id: '492272909994165689' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:12.644Z' + updated_at: '2026-07-10T12:54:12.644Z' + version: 1783688052 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272909998359995' + contact_person: + id: null + contact_id: '492272909994165689' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:12.649Z' + updated_at: '2026-07-10T12:54:12.649Z' + version: 1783688052 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF46000000000000099PMRTSA + short_payment_reference: RF4699PMRTSA + reference: foo + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:12.689Z' + updated_at: '2026-07-10T12:55:18.119Z' + public_view_code: '918583' + public_view_code_expires_at: '2026-10-10T12:54:12.743Z' + version: 1783688118 + details: + - id: '492272910044497343' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: 20260701..20260731 + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:12.692Z' + updated_at: '2026-07-10T12:54:12.779Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/15e985a0bc101a7365ee5bea9764dc2ba745e98a9600e299f18a8b4d4264e6a0/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/15e985a0bc101a7365ee5bea9764dc2ba745e98a9600e299f18a8b4d4264e6a0/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.696Z' + updated_at: '2026-07-10T12:54:12.696Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:12.755Z' + updated_at: '2026-07-10T12:54:12.755Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:12.798Z' + updated_at: '2026-07-10T12:54:12.798Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + ReturnsAllSalesInvoicesCreatedAfterGivenDatetime: + summary: Returns all sales invoices created after given datetime + value: + - id: '492272910924252689' + administration_id: 123 + contact_id: '492272910557251053' + contact: + id: '492272910557251053' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:13.181Z' + updated_at: '2026-07-10T12:54:13.181Z' + version: 1783688053 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0003 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF940000000000000GQPD94GK + short_payment_reference: RF94GQPD94GK + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:13.531Z' + updated_at: '2026-07-10T12:54:13.654Z' + public_view_code: '231147' + public_view_code_expires_at: '2026-10-10T12:54:13.613Z' + version: 1783688053 + details: + - id: '492272910927398418' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:13.534Z' + updated_at: '2026-07-10T12:54:13.653Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/fe1c6e226bae84d51021bea156d703ca6fc64d5bd9f81dc61bb5f17902e24b3b/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/fe1c6e226bae84d51021bea156d703ca6fc64d5bd9f81dc61bb5f17902e24b3b/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:13.538Z' + updated_at: '2026-07-10T12:54:13.538Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:13.627Z' + updated_at: '2026-07-10T12:54:13.627Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0003 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:13.672Z' + updated_at: '2026-07-10T12:54:13.672Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + - id: '492272910765917698' + administration_id: 123 + contact_id: '492272910557251053' + contact: + id: '492272910557251053' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:13.181Z' + updated_at: '2026-07-10T12:54:13.181Z' + version: 1783688053 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0002 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF920000000000000S7X9SVQV + short_payment_reference: RF92S7X9SVQV + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:13.380Z' + updated_at: '2026-07-10T12:54:13.470Z' + public_view_code: '757570' + public_view_code_expires_at: '2026-10-10T12:54:13.432Z' + version: 1783688053 + details: + - id: '492272910768014851' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:13.382Z' + updated_at: '2026-07-10T12:54:13.468Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/57d18a2391d4093a642f2fd8607a7b192bb7a86c37c7cd138e9b043e24feb9f1/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/57d18a2391d4093a642f2fd8607a7b192bb7a86c37c7cd138e9b043e24feb9f1/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:13.386Z' + updated_at: '2026-07-10T12:54:13.386Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:13.445Z' + updated_at: '2026-07-10T12:54:13.445Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0002 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:13.488Z' + updated_at: '2026-07-10T12:54:13.488Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + - id: '492272910604436978' + administration_id: 123 + contact_id: '492272910557251053' + contact: + id: '492272910557251053' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:13.181Z' + updated_at: '2026-07-10T12:54:13.181Z' + version: 1783688053 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: '492272910561445359' + contact_person: + id: null + contact_id: '492272910557251053' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:13.185Z' + updated_at: '2026-07-10T12:54:13.185Z' + version: 1783688053 + invoice_id: 2026-0001 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF7500000000000005N9VEYG3 + short_payment_reference: RF755N9VEYG3 + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:13.226Z' + updated_at: '2026-07-10T12:54:13.319Z' + public_view_code: '580064' + public_view_code_expires_at: '2026-10-10T12:54:13.281Z' + version: 1783688053 + details: + - id: '492272910607582707' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: 20260701..20260731 + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:13.229Z' + updated_at: '2026-07-10T12:54:13.318Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/b44aa9e1437377885529edb3618f7f52aee691fe6d1c92df78ac80876a8da0ef/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/b44aa9e1437377885529edb3618f7f52aee691fe6d1c92df78ac80876a8da0ef/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:13.293Z' + updated_at: '2026-07-10T12:54:13.293Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:13.233Z' + updated_at: '2026-07-10T12:54:13.233Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com; janjanssen@dev.null.moneybird.net + email_message: |- + Geachte Jan Janssen, + + In de bijlage kunt u factuur 2026-0001 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:13.337Z' + updated_at: '2026-07-10T12:54:13.337Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + ReturnsPaginatedSalesInvoicesOnPage2: + summary: Returns paginated sales invoices on page 2 + value: + - id: '492272911439103542' + administration_id: 123 + contact_id: '492272911182202401' + contact: + id: '492272911182202401' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:13.777Z' + updated_at: '2026-07-10T12:54:13.777Z' + version: 1783688053 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: 2026-0002 + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: null + state: open + invoice_date: '2026-07-10' + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: RF570000000000000EZEEJJCS + short_payment_reference: RF57EZEEJJCS + reference: Project X + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: '2026-07-10' + created_at: '2026-07-10T12:54:14.021Z' + updated_at: '2026-07-10T12:54:14.117Z' + public_view_code: '185705' + public_view_code_expires_at: '2026-10-10T12:54:14.079Z' + version: 1783688054 + details: + - id: '492272911442249271' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: 1 x + amount_decimal: '1.0' + description: Project X + price: '300.0' + period: null + row_order: 1 + total_price_excl_tax_with_discount: '300.0' + total_price_excl_tax_with_discount_base: '300.0' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:14.025Z' + updated_at: '2026-07-10T12:54:14.116Z' + payments: [] + total_paid: '0.0' + total_unpaid: '363.0' + total_unpaid_base: '363.0' + prices_are_incl_tax: false + total_price_excl_tax: '300.0' + total_price_excl_tax_base: '300.0' + total_price_incl_tax: '363.0' + total_price_incl_tax_base: '363.0' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: '2026-07-24' + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/dafd6def58e9747121c3dc1e9330deeb248f6b3d150ce285b5fb6f95a14bda3b/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/dafd6def58e9747121c3dc1e9330deeb248f6b3d150ce285b5fb6f95a14bda3b/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:14.029Z' + updated_at: '2026-07-10T12:54:14.029Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_open + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:14.092Z' + updated_at: '2026-07-10T12:54:14.092Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_send_email + link_entity_id: null + link_entity_type: null + data: + email_address: info@example.com + email_message: |- + Geachte Foobar Holding B.V., + + In de bijlage kunt u factuur 2026-0002 voor onze diensten vinden. Wij verzoeken u vriendelijk de factuur voor 24-07-2026 te voldoen. + + Met vriendelijke groet, + + Parkietje B.V. + created_at: '2026-07-10T12:54:14.135Z' + updated_at: '2026-07-10T12:54:14.135Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '300.0' + taxable_amount_base: '300.0' + tax_amount: '63.0' + tax_amount_base: '63.0' + time_entries: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManySalesInvoicesAreRequested: + summary: Returns an error when too many sales invoices are requested + value: + error: per_page does not have a valid value + GiveA400ErrorWhenTheDateRangeIsFromTheBeginningOfTime: + summary: Give a 400 error when the date range is from the beginning of time + value: + error: Period must have both a start and end date + GiveA400ErrorWhenTheDateRangeIsUntilTheEndOfTime: + summary: Give a 400 error when the date range is until the end of time + value: + error: Period must have both a start and end date + operationId: get_administration_id_sales_invoices + post: + summary: Create a sales invoice + description: |- + Create a sales invoice with the parameters defined in the request body. + + ### Required scope(s) + `sales_invoices` + tags: + - Sales invoices + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + sales_invoice: + type: object + unevaluatedProperties: false + properties: + contact_id: + $ref: '#/components/schemas/identifier' + description: The ID of the contact associated with the sales invoice. This is mandatory when setting the contact_person_id. Should be a valid contact id. + contact_person_id: + $ref: '#/components/schemas/identifier' + description: The ID of the contact person associated with the sales invoice. Should be a valid contact person id. + original_estimate_id: + $ref: '#/components/schemas/identifier' + description: The ID of the estimate this invoice was created from. Used to link an invoice to its originating estimate. + document_style_id: + $ref: '#/components/schemas/identifier' + description: Default document style is used if value is not provided. Should be a valid document style id. + workflow_id: + $ref: '#/components/schemas/identifier' + description: If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. + reference: + type: string + description: Your own reference for this invoice, e.g. a project code or PO number. Visible to the recipient. + invoice_sequence_id: + type: string + description: The ID of the numbering sequence to use for the invoice number. If not provided, the administration default is used. + invoice_date: + type: string + description: The date of the invoice. Defaults to the current date. + format: date + first_due_interval: + type: integer + description: The number of days after the invoice date before the invoice is due. Defaults to the first workflow step's due interval. + currency: + type: string + description: ISO three-character currency code, e.g. EUR or USD. Defaults to the workflow's currency. + prices_are_incl_tax: + type: + - boolean + - string + description: Whether the prices on the invoice are inclusive of tax. Defaults to the workflow's setting. + payment_conditions: + type: string + description: Free-text payment conditions printed on the invoice, e.g. "Payment within 30 days". Defaults to the workflow's payment conditions. + discount: + $ref: '#/components/schemas/number' + description: Discount percentage applied to the entire invoice, e.g. `10.0` for 10%. + time_entry_ids: + type: array + description: An array of time entry IDs to associate with this invoice. Linked time entries will be marked as invoiced. + items: + type: + - integer + details_attributes: + $ref: '#/components/schemas/details_attributes' + custom_fields_attributes: + $ref: '#/components/schemas/custom_fields_attributes' + required: [] + from_payment_request: + type: + - boolean + - string + description: Set to `true` when the invoice was created from a Moneybird payment request. + required: [] + examples: + CreateASalesInvoiceInAForeignCurrency: + summary: Create a sales invoice in a foreign currency + value: + sales_invoice: + reference: '30052' + contact_id: 492272914311153500 + currency: USD + details_attributes: + - description: Rocking Chair + price: 159.99 + tax_rate_id: 492272914531354430 + CreateABasicSalesInvoice: + summary: Create a basic sales invoice + value: + sales_invoice: + reference: '30052' + contact_id: 492272914960222100 + details_attributes: + - description: Rocking Chair + price: 129.95 + responses: + '201': + description: Sales invoice created + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + CreateASalesInvoiceInAForeignCurrency: + summary: Create a sales invoice in a foreign currency + value: + id: '492272914580637509' + administration_id: 123 + contact_id: '492272914311153455' + contact: + id: '492272914311153455' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:16.761Z' + updated_at: '2026-07-10T12:54:16.761Z' + version: 1783688056 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272914315347761' + contact_id: '492272914311153455' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:16.765Z' + updated_at: '2026-07-10T12:54:16.765Z' + version: 1783688056 + archived: false + contact_person_id: null + contact_person: null + invoice_id: null + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 2 + state: draft + invoice_date: null + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: null + short_payment_reference: null + reference: '30052' + language: nl + currency: USD + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: null + created_at: '2026-07-10T12:54:17.017Z' + updated_at: '2026-07-10T12:54:17.023Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688057 + details: + - id: '492272914583783238' + administration_id: 123 + tax_rate_id: '492272914531354436' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Rocking Chair + price: '159.99' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '159.99' + total_price_excl_tax_with_discount_base: '127.99' + tax_report_reference: + - NL/3a + mandatory_tax_text: Intracommunautaire levering, artikel 138, lid 1, Richtlijn 2006/112 + created_at: '2026-07-10T12:54:17.021Z' + updated_at: '2026-07-10T12:54:17.021Z' + payments: [] + total_paid: '0.0' + total_unpaid: '159.99' + total_unpaid_base: '127.99' + prices_are_incl_tax: false + total_price_excl_tax: '159.99' + total_price_excl_tax_base: '127.99' + total_price_incl_tax: '159.99' + total_price_incl_tax_base: '127.99' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: null + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/42561f648d7cd15490ebeb182447a21a80310f147c1a96e4072c1a66324ba8a4/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/42561f648d7cd15490ebeb182447a21a80310f147c1a96e4072c1a66324ba8a4/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:17.025Z' + updated_at: '2026-07-10T12:54:17.025Z' + tax_totals: [] + time_entries: [] + CreateABasicSalesInvoice: + summary: Create a basic sales invoice + value: + id: '492272915195103098' + administration_id: 123 + contact_id: '492272914960222053' + contact: + id: '492272914960222053' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: null + lastname: null + address1: Hoofdstraat 12 + address2: null + zipcode: 1234AB + city: Amsterdam + country: NL + phone: null + delivery_method: Email + customer_id: customer-1 + tax_number: null + chamber_of_commerce: null + bank_account: null + is_trusted: false + max_transfer_amount: null + attention: null + email: info@example.com + email_ubl: true + send_invoices_to_attention: null + send_invoices_to_email: info@example.com + send_estimates_to_attention: null + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: null + sepa_iban_account_name: null + sepa_bic: null + sepa_mandate_id: null + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: null + credit_card_reference: null + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: null + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:17.380Z' + updated_at: '2026-07-10T12:54:17.380Z' + version: 1783688057 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/0000000000000000000000000000000000000000000000000000000000000001/all + notes: [] + custom_fields: [] + contact_people: + - id: '492272914965464935' + contact_id: '492272914960222053' + administration_id: 123 + firstname: Jan + lastname: Janssen + phone: 123-456-2346 + email: janjanssen@dev.null.moneybird.net + department: Sales + created_at: '2026-07-10T12:54:17.385Z' + updated_at: '2026-07-10T12:54:17.385Z' + version: 1783688057 + archived: false + contact_person_id: null + contact_person: null + invoice_id: null + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 2 + state: draft + invoice_date: null + due_date: '2026-07-24' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: null + short_payment_reference: null + reference: '30052' + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: null + created_at: '2026-07-10T12:54:17.604Z' + updated_at: '2026-07-10T12:54:17.608Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688057 + details: + - id: '492272915197200251' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Rocking Chair + price: '129.95' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '129.95' + total_price_excl_tax_with_discount_base: '129.95' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:17.606Z' + updated_at: '2026-07-10T12:54:17.606Z' + payments: [] + total_paid: '0.0' + total_unpaid: '157.24' + total_unpaid_base: '157.24' + prices_are_incl_tax: false + total_price_excl_tax: '129.95' + total_price_excl_tax_base: '129.95' + total_price_incl_tax: '157.24' + total_price_incl_tax_base: '157.24' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: null + original_estimate_id: null + url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/2e23681c0208d6e5e0668145318fa1e2f43d15910e20f34cb5c88e28abc14c0e/sales_invoice + payment_url: http://moneybird.dev/123/external/0000000000000000000000000000000000000000000000000000000000000001/2e23681c0208d6e5e0668145318fa1e2f43d15910e20f34cb5c88e28abc14c0e/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:17.610Z' + updated_at: '2026-07-10T12:54:17.610Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '129.95' + taxable_amount_base: '129.95' + tax_amount: '27.29' + tax_amount_base: '27.29' + time_entries: [] + '402': + description: Payment required + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ExceedingTheMonthlySalesInvoiceLimitOnAFreePlanResultsInAnError: + summary: Exceeding the monthly sales invoice limit on a free plan results in an error + value: + error: creating sales invoices is limited + symbolic: + administration: limit_reached + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + CreatingAnInvoiceWithAnUnknownCustomFieldIdResultsInAnError: + summary: Creating an invoice with an unknown custom field id results in an error + value: + error: Custom field with id 123456 not found for administration + symbolic: + custom_fields_attributes: not_found + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_sales_invoices + /{administration_id}/sepa_credit_transfer{format}: + post: + summary: Upload a SEPA credit transfer file to create purchase transaction batches + description: |- + Upload a SEPA credit transfer file (pain.001.001.09/Version 2019) to create purchase transaction batches. This endpoint requires an active Moneybird Banking account in the administration. + + ### Required scope(s) + `bank` + tags: + - Purchase transactions + security: + - bearerAuth: + - bank + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + required: + - file + properties: + file: + type: string + format: binary + description: SEPA credit transfer file (pain.001.001.09/Version 2019) + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account that will be linked to all the purchase transactions in the file + financial_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the Moneybird Banking financial account that will be linked to all the purchase transactions in the file. Must be an active Moneybird Banking account. If not provided, the financial account will be determined based on the debtor account in the file. + responses: + '201': + description: Purchase transaction batches created successfully using the SEPA credit transfer file + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/purchase_transaction_batch_response' + examples: + Returns201: + summary: Returns 201 + value: + - id: '492272957746316861' + administration_id: 123 + financial_account_id: '492272957643556404' + state: open + identifier: PMT20250910-STD + created_at: '2025-09-12T00:00:00.000Z' + updated_at: '2025-09-12T00:00:00.000Z' + - id: '492272957750511167' + administration_id: 123 + financial_account_id: '492272957655090743' + state: open + identifier: PMT20250910-INST + created_at: '2025-09-12T00:00:00.000Z' + updated_at: '2025-09-12T00:00:00.000Z' + - id: '492272957754705473' + administration_id: 123 + financial_account_id: '492272957667673658' + state: open + identifier: PMT20250910-SAL + created_at: '2025-09-12T00:00:00.000Z' + updated_at: '2025-09-12T00:00:00.000Z' + CreatesPurchaseTransactionBatchesFromASepaCreditTransferFile: + summary: Creates purchase transaction batches from a sepa credit transfer file + value: + - id: '492272958454105722' + administration_id: 123 + financial_account_id: '492272958328276593' + state: open + identifier: PMT20250910-STD + created_at: '2025-09-12T00:00:00.000Z' + updated_at: '2025-09-12T00:00:00.000Z' + - id: '492272958459348604' + administration_id: 123 + financial_account_id: '492272958338762356' + state: open + identifier: PMT20250910-INST + created_at: '2025-09-12T00:00:00.000Z' + updated_at: '2025-09-12T00:00:00.000Z' + - id: '492272958464591486' + administration_id: 123 + financial_account_id: '492272958349248119' + state: open + identifier: PMT20250910-SAL + created_at: '2025-09-12T00:00:00.000Z' + updated_at: '2025-09-12T00:00:00.000Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenNoFileIsProvided: + summary: Returns 400 when no file is provided + value: + errors: + - File is required + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns401WhenUserHasNoBankPermission: + summary: Returns 401 when user has no bank permission + value: + error: No access to bank + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns403WhenAdministrationHasNoActiveMoneybirdBankingAccounts: + summary: Returns 403 when administration has no active moneybird banking accounts + value: + error: No access to SEPA credit transfers + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenNoLedgerAccountIsFound: + summary: Returns 404 when no ledger account is found + value: + error: 'Record not found for model name: Category' + CreatesAnImportWithGivenIds: + summary: Creates an import with given ids + value: + error: 'Record not found for model name: Financial account' + Returns404WhenNoFinancialAccountIsFound: + summary: Returns 404 when no financial account is found + value: + error: 'Record not found for model name: Financial account' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenCreatedBatchesAreInvalid: + summary: Returns 422 when created batches are invalid + value: + errors: + - Purchase transactions is invalid + - Amount must be greater than or equal to 0.01 + Returns422WhenTheXmlIsInvalid: + summary: Returns 422 when the xml is invalid + value: + message: The XML is invalid + errors: + - '6:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}CreDtTm'': ''invalid-date'' is not a valid value of the atomic type ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}ISODateTime''.' + - '7:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}NbOfTxs'': [facet ''pattern''] The value ''not-a-number'' is not accepted by the pattern ''[0-9]{1,15}''.' + - '8:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}CtrlSum'': ''invalid-amount'' is not a valid value of the atomic type ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}DecimalNumber''.' + - '10:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}Nm'': [facet ''minLength''] The value has a length of ''0''; this underruns the allowed minimum length of ''1''.' + - '14:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}PmtInfId'': [facet ''minLength''] The value has a length of ''0''; this underruns the allowed minimum length of ''1''.' + - '15:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}PmtMtd'': [facet ''enumeration''] The value ''INVALID'' is not an element of the set {''CHK'', ''TRF'', ''TRA''}.' + - '16:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}NbOfTxs'': [facet ''pattern''] The value ''-1'' is not accepted by the pattern ''[0-9]{1,15}''.' + - '18:0: ERROR: Element ''{urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}Dbtr'': This element is not expected. Expected is one of ( {urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}PmtTpInf, {urn:iso:std:iso:20022:tech:xsd:pain.001.001.09}ReqdExctnDt ).' + operationId: post_administration_id_sepa_credit_transfer + /{administration_id}/subscription_templates/{id}/checkout_identifier{format}: + get: + summary: Create online sales link [Deprecated] + description: |- + This call generates an online sales link, which enables pre-setting the contact and start date for a subscription. + + ### Required scope(s) + `settings` + deprecated: true + x-sunset: '2025-12-31' + tags: + - Subscription templates + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: contact_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + examples: + CreatesAnOnlineSalesLink: + summary: Creates an online sales link + value: '492273018849985708' + - name: start_date + in: query + required: false + schema: + type: string + format: date + examples: + CreatesAnOnlineSalesLink: + summary: Creates an online sales link + value: '2026-07-10' + - name: product_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + examples: + CreatesAnOnlineSalesLinkForAProduct: + summary: Creates an online sales link for a product + value: '492273019071235270' + responses: + '200': + description: A subscription template + content: + application/json: + schema: + type: string + examples: + CreatesAnOnlineSalesLink: + summary: Creates an online sales link + value: http://checkout.moneybird.dev/s/T05ldHZDaFNhcDJWS1BZYy92TDdYdUJJZS9mSm54NlBiYWVyWUJ5alBJTGQ0bXJZRUt6R3N6bGRsMENIL2NvcDlmNFo4dkllcTFvNzVSTWtpQ2ZWTFEzSDJkdFAxSUlueU9vPS0tR2lEb2EySXlKMGlpdTVyMi0tZFJ3V0dpbWFFODlmMUtSaVpLNzd6dz09 + CreatesAnOnlineSalesLinkIfNoContactIdIsProvided: + summary: Creates an online sales link if no contact id is provided + value: http://checkout.moneybird.dev/s/K2tEWGRMRWRaREFhOUJaOVZWcUxwYXhPV0FVZFZlOHZaaEF1U2hFKzZ6TSs4RTkvSGltaGp6eU41NVRidmZWRWd0VlU1QT09LS01UWdZRVRYbEFGdnJyelVFLS1hZE1JV29WSlJMTHZJTlBwVXJ6MmVRPT0= + CreatesAnOnlineSalesLinkForAProduct: + summary: Creates an online sales link for a product + value: http://checkout.moneybird.dev/stp/TWV5Wit5SHA2YTRjbGUyMDVNMWlnekU0L245L0hOK1ZEaVVZOEhmK0RYSzB6Z3hTYjNlTzdjdXNieW5oTzAxS0xqazZnQT09LS1kTDU0T0NVM3pkaEhVUkxOLS16SXJnM0Ftb3VyMW5zNW1zNFdPTkxBPT0= + headers: + X-Deprecated-Endpoint: + description: This endpoint is deprecated and will be removed in the future. + schema: + type: string + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfContactIsNotFound: + summary: Returns 404 if contact is not found + value: + error: 'Record not found for model name: Contact' + Returns404WhenTheProductIsNotFound: + summary: Returns 404 when the product is not found + value: + error: Product not found for subscription template + operationId: get_administration_id_subscription_templates_id_checkout_identifier + /{administration_id}/subscription_templates/{id}/sales_link{format}: + post: + summary: Create online sales link + description: |- + This call generates an online sales link, and allows pre-setting the contact and start date for a subscription. The link is valid for one hour + + ### Required scope(s) + `settings` + tags: + - Subscription templates + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: contact_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + - name: start_date + in: query + required: false + schema: + type: string + format: date + - name: product_id + in: query + required: false + schema: + $ref: '#/components/schemas/identifier' + responses: + '201': + description: Online sales link created successfully + content: + application/json: + schema: + type: string + examples: + CreatesAnOnlineSalesLinkForAProduct: + summary: Creates an online sales link for a product + value: http://checkout.moneybird.dev/o/gGoEAPjelPVz + CreatesAnOnlineSalesLink: + summary: Creates an online sales link + value: http://checkout.moneybird.dev/o/MA67vBWoKlb8 + CreatesAnOnlineSalesLinkIfNoContactIdIsProvided: + summary: Creates an online sales link if no contact id is provided + value: http://checkout.moneybird.dev/o/GJb8vm9l2g7b + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404IfContactIsNotFound: + summary: Returns 404 if contact is not found + value: + error: 'Record not found for model name: Contact' + Returns404WhenTheProductIsNotFound: + summary: Returns 404 when the product is not found + value: + error: Product not found for subscription template + operationId: post_administration_id_subscription_templates_id_sales_link + /{administration_id}/subscription_templates{format}: + get: + summary: List all subscription templates + description: |- + This call retrieves a paginated list of all subscription templates available in the administration. + Each page consists of up to 100 subscription templates. To access subsequent pages, utilize the page parameter to fetch the next set of subscription templates. + + ### Required scope(s) + `settings` + tags: + - Subscription templates + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/per_page' + - $ref: '#/components/parameters/page' + responses: + '200': + description: A list of subscription templates + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/subscription_template_response' + examples: + ListsSubscriptionTemplatesForTheAdministration: + summary: Lists subscription templates for the administration + value: + - id: '492273019143587022' + administration_id: 123 + workflow_id: '492273019127858376' + document_style_id: '492272803084502169' + mergeable: false + contact_can_update: true + products: + - id: '492273019137295565' + administration_id: 123 + description: fancy product + title: null + identifier: null + price: '10.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:55:56.732Z' + updated_at: '2026-07-10T12:55:56.732Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400IfPageParamIsInvalid: + summary: Returns a 400 if page param is invalid + value: + error: Page is too small + symbolic: + page: min + operationId: get_administration_id_subscription_templates + /{administration_id}/subscriptions/{id}/additional_charges{format}: + post: + summary: Create an additional charge to be invoiced together with the subscription + description: |- + At the end of the current subscription period, the additional charges are merged where possible and an invoice will be created for them. The invoice will be scheduled for sending together with the subscription invoice, so that they are merged on sending. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + type: object + additionalProperties: true + examples: + CreateAUsageCharge: + summary: Create a usage charge + value: + product_id: 492272927406819200 + amount: 5 x + price: 100 + period: 20210601..20210630 + description: Transaction Costs + responses: + '201': + description: Subscription additional charge created + content: + application/json: + schema: + $ref: '#/components/schemas/subscription_additional_charge_response' + examples: + CreateAUsageCharge: + summary: Create a usage charge + value: + id: '492272927673157503' + administration_id: 123 + contact_id: null + subscription_id: '492272927440373618' + product_id: '492272927406819180' + detail_id: null + amount: 5 x + price: '100.0' + period: 202106..202106 + description: Transaction Costs + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: post_administration_id_subscriptions_id_additional_charges + get: + summary: Get additional charges + description: |- + Get the additional charges of the given subscription. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + - name: include_billed + in: query + required: false + schema: + type: + - boolean + - string + description: If true, includes the additional charges that have already been billed. Default is false. + examples: + DoesReturnBilledAdditionalChargesIfIncludeBilledIsTrue: + summary: Does return billed additional charges if include billed is true + value: 'true' + responses: + '200': + description: A subscription additional charge + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/subscription_additional_charge_response' + examples: + ViewsAdditionalChargesOfASubscription: + summary: Views additional charges of a subscription + value: + - id: '492272930128921640' + administration_id: 123 + contact_id: null + subscription_id: '492272929889846297' + product_id: '492272930118435878' + detail_id: null + amount: 5 x + price: '100.0' + period: 202106..202106 + description: Transaction Costs + DoesReturnBilledAdditionalChargesIfIncludeBilledIsTrue: + summary: Does return billed additional charges if include billed is true + value: + - id: '492272931429155966' + administration_id: 123 + contact_id: null + subscription_id: '492272931173303407' + product_id: '492272931419718780' + detail_id: null + amount: 5 x + price: '100.0' + period: 202106..202106 + description: Transaction Costs + - id: '492272931448030337' + administration_id: 123 + contact_id: null + subscription_id: '492272931173303407' + product_id: '492272931437544575' + detail_id: '492272931483681923' + amount: 5 x + price: '100.0' + period: 202106..202106 + description: Transaction Costs + '404': + $ref: '#/components/responses/404_not_found' + operationId: get_administration_id_subscriptions_id_additional_charges + /{administration_id}/subscriptions/{id}/create_and_schedule_one_off_sales_invoice{format}: + post: + summary: Create and schedule an invoice to be sent together with the subscription + description: |- + Besides the recurring sales invoice for the subscription, you sometimes need to bill + separate costs like usage based charges. Ideally you want these costs to be on the + same invoice as the subscription invoice. This endpoint allows you to put extra invoice + details on the subscription invoice. + + This endpoint creates a new sales invoice and schedules it for sending on the same date as + the next subscription invoice. During sending, Moneybird will merge both the scheduled invoice + and the subscription invoice. This means the contact will receive one sales invoice with + multiple invoice details, both from the subscription and from the one off sales invoice. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + sales_invoice: + type: object + unevaluatedProperties: false + properties: + details_attributes: + $ref: '#/components/schemas/details_attributes' + invoice_date: + type: string + format: date + description: Date to schedule the invoice for. Defaults to the date of the next subscription invoice. + required: [] + required: [] + examples: + CreatesASalesInvoice: + summary: Creates a sales invoice + value: + sales_invoice: + details_attributes: + '0': + description: Extra costs subscription + price: '10.5' + responses: + '201': + description: Sales invoice created + content: + application/json: + schema: + $ref: '#/components/schemas/sales_invoice_response' + examples: + CreatesASalesInvoice: + summary: Creates a sales invoice + value: + id: '492272927277844328' + administration_id: 123 + contact_id: '492272926980048727' + contact: + id: '492272926980048727' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: '' + lastname: '' + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:28.834Z' + updated_at: '2026-07-10T12:54:28.834Z' + version: 1783688068 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/b1042a1b8e5c3d567a310484b6db0f3704866adda661623c281870c883e64b73/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + invoice_id: null + recurring_sales_invoice_id: null + subscription_id: null + workflow_id: '492272802756297871' + document_style_id: '492272803084502169' + identity_id: '492272801888076907' + draft_id: 2 + state: scheduled + invoice_date: '2026-08-01' + due_date: '2026-08-15' + payment_conditions: We verzoeken u vriendelijk het bovenstaande bedrag van {document.total_price} voor {document.due_date} te voldoen op onze bankrekening onder vermelding van de omschrijving {document.payment_reference}. Voor vragen kunt u contact opnemen per e-mail. + payment_reference: null + short_payment_reference: null + reference: null + language: nl + currency: EUR + discount: '0.0' + original_sales_invoice_id: null + paused: false + paid_at: null + sent_at: null + created_at: '2026-07-10T12:54:28.834Z' + updated_at: '2026-07-10T12:54:28.834Z' + public_view_code: null + public_view_code_expires_at: null + version: 1783688068 + details: + - id: '492272927280990057' + administration_id: 123 + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + project_id: null + product_id: null + amount: null + amount_decimal: '1.0' + description: Extra costs subscription + price: '10.5' + period: null + row_order: 0 + total_price_excl_tax_with_discount: '10.5' + total_price_excl_tax_with_discount_base: '10.5' + tax_report_reference: + - NL/1a + mandatory_tax_text: null + created_at: '2026-07-10T12:54:28.834Z' + updated_at: '2026-07-10T12:54:28.834Z' + payments: [] + total_paid: '0.0' + total_unpaid: '12.71' + total_unpaid_base: '12.71' + prices_are_incl_tax: false + total_price_excl_tax: '10.5' + total_price_excl_tax_base: '10.5' + total_price_incl_tax: '12.71' + total_price_incl_tax_base: '12.71' + total_discount: '0.0' + marked_dubious_on: null + marked_uncollectible_on: null + reminder_count: 0 + next_reminder: null + original_estimate_id: null + url: http://moneybird.dev/123/external/b1042a1b8e5c3d567a310484b6db0f3704866adda661623c281870c883e64b73/50c856911edb309d0f9e60f4d59746cb36cf907c1087578b1a1f564747b5463d/sales_invoice + payment_url: http://moneybird.dev/123/external/b1042a1b8e5c3d567a310484b6db0f3704866adda661623c281870c883e64b73/50c856911edb309d0f9e60f4d59746cb36cf907c1087578b1a1f564747b5463d/sales_invoice + custom_fields: [] + notes: [] + attachments: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:28.834Z' + updated_at: '2026-07-10T12:54:28.834Z' + - administration_id: 123 + user_id: '492272801297728613' + action: sales_invoice_state_changed_to_scheduled + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:28.834Z' + updated_at: '2026-07-10T12:54:28.834Z' + tax_totals: + - tax_rate_id: '492272802314847370' + taxable_amount: '10.5' + taxable_amount_base: '10.5' + tax_amount: '2.21' + tax_amount_base: '2.21' + time_entries: [] + '400': + $ref: '#/components/responses/400_bad_request' + '402': + $ref: '#/components/responses/402_payment_required' + '404': + $ref: '#/components/responses/404_not_found' + operationId: post_administration_id_subscriptions_id_create_and_schedule_one_off_sales_invoice + /{administration_id}/subscriptions/{id}{format}: + get: + summary: Get subscription + description: |- + Get a subscription. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A subscription + content: + application/json: + schema: + $ref: '#/components/schemas/subscription_response' + examples: + ReturnsASubscription: + summary: Returns a subscription + value: + id: '492272929250215920' + administration_id: 123 + start_date: '2017-01-01' + end_date: null + frequency: 1 + frequency_type: month + reference: null + cancelled_at: null + product_id: '492272929233438702' + product: + id: '492272929233438702' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:30.993Z' + updated_at: '2026-07-10T12:54:30.993Z' + contact_id: '492272929218758636' + contact: + id: '492272929218758636' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: '' + lastname: '' + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:30.978Z' + updated_at: '2026-07-10T12:54:30.978Z' + version: 1783688070 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/7aca0c680cc4b046368ddb999a554337b507e08967fe32d00895c2c5177d33fd/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + subscription_products: + - start_date: '2017-01-01' + end_date: null + product_id: '492272929233438702' + product: + id: '492272929233438702' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:30.993Z' + updated_at: '2026-07-10T12:54:30.993Z' + amount: 1 x + discount: '0.0' + recurring_sales_invoice_id: '492272929284818931' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTheSubscriptionDoesNotExist: + summary: Returns 404 when the subscription does not exist + value: + error: 'Record not found for model name: Subscription' + operationId: get_administration_id_subscriptions_id + patch: + summary: Update a subscription + description: |- + Updates the product the contact is subscribed to. This will automatically calculate the differences + between the product prices and create a one off sales invoice to bill the extra charge for the remaining + billing period. + + Optionally you can provide a start date for the product change to become active. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + subscription: + type: object + unevaluatedProperties: false + properties: + contact_person_id: + $ref: '#/components/schemas/identifier_nullable' + description: Should be a valid contact person id. + document_style_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid document style id. + reference: + type: string + mergeable: + type: + - boolean + - string + default: false + description: Merge invoices from this subscription with other mergeable invoices for the same contact before sending. Only applies when invoices are sent automatically. + prices_are_incl_tax: + type: + - boolean + - string + default: false + description: Whether the amounts on the generated invoices are inclusive of tax. + product_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid product id. + start_date: + type: string + format: date + amount: + type: string + description: Quantity of the product billed each period. + discount: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + required: [] + required: [] + examples: + UpdatesASubscription: + summary: Updates a subscription + value: + subscription: + product_id: 492272923261797950 + discount: 10 + amount: 3 x + responses: + '200': + description: Subscription updated + content: + application/json: + schema: + $ref: '#/components/schemas/subscription_response' + examples: + UpdatesASubscription: + summary: Updates a subscription + value: + id: '492272923307935331' + administration_id: 123 + start_date: '2017-01-01' + end_date: null + frequency: 1 + frequency_type: month + reference: null + cancelled_at: null + product_id: '492272923261797979' + product: + id: '492272923261797979' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '30.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:25.298Z' + updated_at: '2026-07-10T12:54:25.298Z' + contact_id: '492272923277526623' + contact: + id: '492272923277526623' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: '' + lastname: '' + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:25.313Z' + updated_at: '2026-07-10T12:54:25.313Z' + version: 1783688065 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/c8ff7b8a771ec0fb373cc94330966a9eae76a6dc412a341c833de97ad641eb1d/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + subscription_products: + - start_date: '2017-01-01' + end_date: '2026-07-09' + product_id: '492272923292206689' + product: + id: '492272923292206689' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:25.326Z' + updated_at: '2026-07-10T12:54:25.326Z' + amount: 1 x + discount: '0.0' + - start_date: '2026-07-10' + end_date: null + product_id: '492272923261797979' + product: + id: '492272923261797979' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '30.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:25.298Z' + updated_at: '2026-07-10T12:54:25.298Z' + amount: 3 x + discount: '10.0' + recurring_sales_invoice_id: '492272923342538342' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404IfTheSubscriptionCouldnTBeFound: + summary: Returns a 404 if the subscription couldn't be found + value: + error: record not found + symbolic: + id: not_found + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: patch_administration_id_subscriptions_id + delete: + summary: Cancel a subscription + description: |- + Cancels the subscription. Stops the recurring sales invoice for the contact. Optionally + you can provide an `end_date` to stop the subscription on a future date. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + subscription: + type: object + unevaluatedProperties: false + properties: + end_date: + type: string + format: date + required: [] + required: [] + examples: + CancelsASubscriptionForTheContact: + summary: Cancels a subscription for the contact + value: + subscription: + end_date: '2026-07-12' + responses: + '200': + description: Subscription cancelled + content: + application/json: + schema: + $ref: '#/components/schemas/subscription_response' + examples: + CancelsASubscriptionForTheContact: + summary: Cancels a subscription for the contact + value: + id: '492272924497020598' + administration_id: 123 + start_date: '2017-01-01' + end_date: '2026-07-12' + frequency: 1 + frequency_type: month + reference: null + cancelled_at: '2026-07-10T12:54:26.691Z' + product_id: '492272924481291956' + product: + id: '492272924481291956' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:26.460Z' + updated_at: '2026-07-10T12:54:26.460Z' + contact_id: '492272924465563314' + contact: + id: '492272924465563314' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: '' + lastname: '' + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:26.445Z' + updated_at: '2026-07-10T12:54:26.445Z' + version: 1783688066 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/6bd68660a2410b42380e0fb64c8610e5adc139e16821a5d4cca06d9b687f3518/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + subscription_products: + - start_date: '2017-01-01' + end_date: '2026-07-12' + product_id: '492272924481291956' + product: + id: '492272924481291956' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:26.460Z' + updated_at: '2026-07-10T12:54:26.460Z' + amount: 1 x + discount: '0.0' + recurring_sales_invoice_id: '492272924529526457' + '400': + $ref: '#/components/responses/400_bad_request' + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_subscriptions_id + /{administration_id}/subscriptions{format}: + get: + summary: List all subscriptions + description: |- + Lists all subscriptions for the given contact. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: contact_id + in: query + required: true + schema: + $ref: '#/components/schemas/identifier' + examples: + ListsAllSubscriptionsForAContact: + summary: Lists all subscriptions for a contact + value: '492272928735365063' + responses: + '200': + description: A list of subscriptions + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/subscription_response' + examples: + ListsAllSubscriptionsForAContact: + summary: Lists all subscriptions for a contact + value: + - id: '492272928766822347' + administration_id: 123 + start_date: '2017-01-01' + end_date: null + frequency: 1 + frequency_type: month + reference: null + cancelled_at: null + product_id: '492272928751093705' + product: + id: '492272928751093705' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:30.532Z' + updated_at: '2026-07-10T12:54:30.532Z' + contact_id: '492272928735365063' + contact: + id: '492272928735365063' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: '' + lastname: '' + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:30.517Z' + updated_at: '2026-07-10T12:54:30.517Z' + version: 1783688070 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/d8d1bb24c4db4a306b57cbae57858a25c49b378f1dc03389401edb7ba86db4af/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + subscription_products: + - start_date: '2017-01-01' + end_date: null + product_id: '492272928751093705' + product: + id: '492272928751093705' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:30.532Z' + updated_at: '2026-07-10T12:54:30.532Z' + amount: 1 x + discount: '0.0' + recurring_sales_invoice_id: '492272928802473934' + operationId: get_administration_id_subscriptions + post: + summary: Create a new subscription + description: |- + Starts a new subscription for the given contact. The `product_id` points to a product with a frequency, price and description. + A recurring sales invoice is automatically created to bill the contact for the given frequency. The first invoice will be sent on the + start date, but no sooner than tomorrow. The `reference` will be added to the sales invoices. + + Optionally you can create a subscription with a different frequency than stored in the product. Make sure the frequency of the product + and the provided frequency are compatible. E.g. you can bill a monthly product yearly. + + ### Required scope(s) + `sales_invoices` + tags: + - Subscriptions + security: + - bearerAuth: + - sales_invoices + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + subscription: + type: object + unevaluatedProperties: false + properties: + start_date: + type: string + format: date + product_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid product id. + amount: + type: string + description: Quantity of the product billed each period. + discount: + $ref: '#/components/schemas/number' + description: Both a decimal and a string '10,95' are accepted. + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + contact_person_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact person id. + end_date: + type: string + format: date + reference: + type: string + document_style_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid document style id. + frequency: + type: integer + description: Number of periods between invoices, combined with `frequency_type`. Must be compatible with the product's frequency (e.g. a monthly product can be billed yearly). Defaults to the product's frequency. + frequency_type: + type: string + enum: + - day + - week + - month + - quarter + - year + description: Length of a single billing period, combined with `frequency`. Defaults to the product's frequency type. + mergeable: + type: + - boolean + - string + default: false + description: Merge invoices from this subscription with other mergeable invoices for the same contact before sending. Only applies when invoices are sent automatically. + prices_are_incl_tax: + type: + - boolean + - string + default: false + description: Whether the amounts on the generated invoices are inclusive of tax. + required: + - start_date + - product_id + required: [] + examples: + CreatesANewSubscriptionForTheContact: + summary: Creates a new subscription for the contact + value: + subscription: + start_date: '2026-07-11' + contact_id: 492272925764749060 + product_id: 492272925780477700 + reference: moneybird.nl + discount: 10 + amount: 5x + responses: + '201': + description: Subscription created + content: + application/json: + schema: + $ref: '#/components/schemas/subscription_response' + examples: + CreatesANewSubscriptionForTheContact: + summary: Creates a new subscription for the contact + value: + id: '492272925803546375' + administration_id: 123 + start_date: '2026-07-11' + end_date: null + frequency: 1 + frequency_type: month + reference: moneybird.nl + cancelled_at: null + product_id: '492272925780477701' + product: + id: '492272925780477701' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:27.699Z' + updated_at: '2026-07-10T12:54:27.699Z' + contact_id: '492272925764749059' + contact: + id: '492272925764749059' + administration_id: 123 + company_name: Foobar Holding B.V. + firstname: '' + lastname: '' + address1: Hoofdstraat 12 + address2: '' + zipcode: 1234AB + city: Amsterdam + country: NL + phone: '' + delivery_method: Email + customer_id: '1' + tax_number: '' + chamber_of_commerce: '' + bank_account: '' + is_trusted: false + max_transfer_amount: null + attention: '' + email: info@example.com + email_ubl: true + send_invoices_to_attention: '' + send_invoices_to_email: info@example.com + send_estimates_to_attention: '' + send_estimates_to_email: info@example.com + direct_debit: false + sepa_active: false + sepa_iban: '' + sepa_iban_account_name: '' + sepa_bic: '' + sepa_mandate_id: '' + sepa_mandate_date: null + sepa_sequence_type: RCUR + credit_card_number: '' + credit_card_reference: '' + credit_card_type: null + tax_number_validated_at: null + tax_number_valid: null + invoice_workflow_id: null + estimate_workflow_id: null + si_identifier: '' + si_identifier_type: null + moneybird_payments_mandate: false + created_at: '2026-07-10T12:54:27.684Z' + updated_at: '2026-07-10T12:54:27.684Z' + version: 1783688067 + sales_invoices_url: https://moneybird.dev/123/sales_invoices/1a194313a7d4140827a39050da0fe3b48a1c8fbce772e4d5a15c1873f7888f7d/all + notes: [] + custom_fields: [] + contact_people: [] + archived: false + contact_person_id: null + contact_person: null + subscription_products: + - start_date: '2026-07-11' + end_date: null + product_id: '492272925780477701' + product: + id: '492272925780477701' + administration_id: 123 + description: My product description + title: null + identifier: null + price: '20.0' + currency: EUR + frequency: 1 + frequency_type: month + tax_rate_id: '492272802314847370' + ledger_account_id: '492272802100937850' + created_at: '2026-07-10T12:54:27.699Z' + updated_at: '2026-07-10T12:54:27.699Z' + amount: 5x + discount: '10.0' + recurring_sales_invoice_id: '492272925842343690' + '400': + $ref: '#/components/responses/400_bad_request' + '402': + $ref: '#/components/responses/402_payment_required' + '422': + $ref: '#/components/responses/422_unprocessable_entity' + operationId: post_administration_id_subscriptions + /{administration_id}/task_list_groups/{id}{format}: + get: + summary: Returns information about a task list group + description: |- + Returns information about a task list group, including its tasks. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A task list group + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_group_response' + examples: + ReturnsASingleGroup: + summary: Returns a single group + value: + id: '492273011137709345' + name: 'Task list group #2' + row_order: 1 + report_type: null + created_at: '2026-07-10T12:55:49.102Z' + updated_at: '2026-07-10T12:55:49.102Z' + tasks: + - id: '492273011138757922' + administration_id: 123 + name: 'Task #2' + description: Description 2 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273011137709345' + parent_task_id: null + created_at: '2026-07-10T12:55:49.103Z' + updated_at: '2026-07-10T12:55:49.103Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:49.105Z' + updated_at: '2026-07-10T12:55:49.105Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenGroupDoesNotExist: + summary: Returns 404 when group does not exist + value: + error: 'Record not found for model name: Group' + operationId: get_administration_id_task_list_groups_id + patch: + summary: Updates a task list group + description: |- + Updates a task list group's name or report type. Updating the report type will destroy all tasks and generate new tasks based on the new report. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + group: + type: object + unevaluatedProperties: false + properties: + name: + type: string + report_type: + type: string + enum: + - balance_sheet + - profit_loss + - debtor + - creditor + - assets + description: Report this group is based on; its tasks are generated from the report. + examples: + UpdatesAGroup: + summary: Updates a group + value: + group: + name: Updated Group + UpdatesAGroupWithoutParams: + summary: Updates a group without params + value: {} + responses: + '200': + description: Group updated + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_group_response' + examples: + UpdatesAGroup: + summary: Updates a group + value: + id: '492273011366298946' + name: Updated Group + row_order: 1 + report_type: null + created_at: '2026-07-10T12:55:49.321Z' + updated_at: '2026-07-10T12:55:49.344Z' + tasks: + - id: '492273011367347523' + administration_id: 123 + name: 'Task #2' + description: Description 2 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273011366298946' + parent_task_id: null + created_at: '2026-07-10T12:55:49.322Z' + updated_at: '2026-07-10T12:55:49.322Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:49.324Z' + updated_at: '2026-07-10T12:55:49.324Z' + UpdatesAGroupWithoutParams: + summary: Updates a group without params + value: + id: '492273011431310666' + name: 'Task list group #2' + row_order: 1 + report_type: null + created_at: '2026-07-10T12:55:49.382Z' + updated_at: '2026-07-10T12:55:49.382Z' + tasks: + - id: '492273011432359243' + administration_id: 123 + name: 'Task #2' + description: Description 2 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273011431310666' + parent_task_id: null + created_at: '2026-07-10T12:55:49.383Z' + updated_at: '2026-07-10T12:55:49.383Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:49.385Z' + updated_at: '2026-07-10T12:55:49.385Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenGroupDoesNotExist: + summary: Returns 404 when group does not exist + value: + error: 'Record not found for model name: Group' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenTryingToUpdateAVirtualGroup: + summary: Returns 422 when trying to update a virtual group + value: + error: The first group cannot be modified + operationId: patch_administration_id_task_list_groups_id + delete: + summary: Deletes a task list group + description: |- + Permanently deletes a task list group and all its tasks. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Group deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenGroupDoesNotExist: + summary: Returns 404 when group does not exist + value: + error: 'Record not found for model name: Group' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenTryingToDeleteAVirtualGroup: + summary: Returns 422 when trying to delete a virtual group + value: + error: The first group cannot be deleted + operationId: delete_administration_id_task_list_groups_id + /{administration_id}/task_list_groups/{task_list_group_id}/tasks{format}: + post: + summary: Creates a new task in a group + description: |- + Creates a new task in the specified task list group. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_group_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + task: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: + type: string + report_type: + type: string + enum: + - balance_sheet + - profit_loss + - debtor + - creditor + - assets + description: Report this task is based on; its content is generated from the report. + assignee_id: + type: string + description: ID of the user to assign the task to. + related_entity_id: + $ref: '#/components/schemas/identifier_nullable' + description: The ID of a ledger account to link to the task + generate_subtasks: + type: boolean + description: Whether to generate subtasks based on the related entity's children + required: + - name + examples: + CreatesANewTask: + summary: Creates a new task + value: + task: + name: New Task + responses: + '201': + description: Task created + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_task_response' + examples: + CreatesANewTask: + summary: Creates a new task + value: + id: '492273010839913714' + administration_id: 123 + name: New Task + description: null + row_order: 1 + completed_at: null + report_type: null + task_lists_group_id: '492273010811602159' + parent_task_id: null + created_at: '2026-07-10T12:55:48.819Z' + updated_at: '2026-07-10T12:55:48.819Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:48.821Z' + updated_at: '2026-07-10T12:55:48.821Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenParametersAreInvalid: + summary: Returns 400 when parameters are invalid + value: + error: task[name] is missing + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenGroupDoesNotExist: + summary: Returns 404 when group does not exist + value: + error: 'Record not found for model name: Group' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenGroupHasGeneratedTasks: + summary: Returns 422 when group has generated tasks + value: + error: Tasks cannot be added to a group with generated tasks + Returns422WhenNameIsMissing: + summary: Returns 422 when name is missing + value: + error: Name can't be blank + operationId: post_administration_id_task_list_groups_task_list_group_id_tasks + /{administration_id}/task_list_tasks/{id}{format}: + get: + summary: Returns information about a task + description: |- + Returns information about a task, including its subtasks, notes, and events. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A task + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_task_response' + examples: + ReturnsASingleTask: + summary: Returns a single task + value: + id: '492273020985935275' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273020984886698' + parent_task_id: null + created_at: '2026-07-10T12:55:58.495Z' + updated_at: '2026-07-10T12:55:58.495Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:58.497Z' + updated_at: '2026-07-10T12:55:58.497Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + operationId: get_administration_id_task_list_tasks_id + patch: + summary: Updates a task + description: |- + Updates a task's attributes. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + task: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: + type: string + report_type: + type: string + enum: + - balance_sheet + - profit_loss + - debtor + - creditor + - assets + description: Report this task is based on; its content is generated from the report. + assignee_id: + type: string + description: ID of the user to assign the task to. + related_entity_id: + $ref: '#/components/schemas/identifier_nullable' + description: The ID of a ledger account to link to the task + generate_subtasks: + type: boolean + description: Whether to generate subtasks based on the related entity's children + examples: + UpdatesATask: + summary: Updates a task + value: + task: + name: Updated Task + responses: + '200': + description: Task updated + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_task_response' + examples: + UpdatesATask: + summary: Updates a task + value: + id: '492273020869543328' + administration_id: 123 + name: Updated Task + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273020868494751' + parent_task_id: null + created_at: '2026-07-10T12:55:58.383Z' + updated_at: '2026-07-10T12:55:58.407Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:58.386Z' + updated_at: '2026-07-10T12:55:58.386Z' + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_name + link_entity_id: null + link_entity_type: null + data: + name: Updated Task + created_at: '2026-07-10T12:55:58.409Z' + updated_at: '2026-07-10T12:55:58.409Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenRequiredParamsAreMissing: + summary: Returns 400 when required params are missing + value: + error: task is missing + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNameIsEmpty: + summary: Returns 422 when name is empty + value: + error: Name can't be blank + operationId: patch_administration_id_task_list_tasks_id + delete: + summary: Deletes a task + description: |- + Permanently deletes a task and all its subtasks. Generated tasks cannot be deleted. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Task deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenTaskIsGenerated: + summary: Returns 422 when task is generated + value: + error: Generated tasks cannot be deleted + operationId: delete_administration_id_task_list_tasks_id + /{administration_id}/task_list_tasks/{task_list_task_id}/assignment{format}: + post: + summary: Assigns a user to a task + description: |- + Assigns a user to the specified task. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_task_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + assignee_id: + $ref: '#/components/schemas/identifier' + description: The ID of the user to assign to the task. A user must have permissions to a task or else a 404 will be thrown. + required: + - assignee_id + examples: + AssignsAUserToTheTask: + summary: Assigns a user to the task + value: + assignee_id: '492272801322894438' + responses: + '200': + description: User assigned to task + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_task_response' + examples: + AssignsAUserToTheTask: + summary: Assigns a user to the task + value: + id: '492273020600059274' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273020599010697' + parent_task_id: null + created_at: '2026-07-10T12:55:58.126Z' + updated_at: '2026-07-10T12:55:58.126Z' + assignee_id: '492272801322894438' + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:58.128Z' + updated_at: '2026-07-10T12:55:58.128Z' + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_assigned + link_entity_id: null + link_entity_type: null + data: + assignee: Mo Neybird + created_at: '2026-07-10T12:55:58.196Z' + updated_at: '2026-07-10T12:55:58.196Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + Returns404WhenAssigneeIdIsInvalid: + summary: Returns 404 when assignee id is invalid + value: + error: Assignee not found + operationId: post_administration_id_task_list_tasks_task_list_task_id_assignment + delete: + summary: Unassigns the user from a task + description: |- + Removes the current assignment from the specified task. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_task_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: User unassigned from task + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_task_response' + examples: + UnassignsTheTask: + summary: Unassigns the task + value: + id: '492273021078209973' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273021077161396' + parent_task_id: null + created_at: '2026-07-10T12:55:58.583Z' + updated_at: '2026-07-10T12:55:58.583Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:58.584Z' + updated_at: '2026-07-10T12:55:58.584Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + operationId: delete_administration_id_task_list_tasks_task_list_task_id_assignment + /{administration_id}/task_list_tasks/{task_list_task_id}/completion{format}: + post: + summary: Completes a task + description: |- + Marks a task and all its subtasks as completed. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_task_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Task completed + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_task_response' + examples: + CompletesTheTask: + summary: Completes the task + value: + id: '492273020506735999' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: '2026-07-10T12:55:58.054Z' + report_type: null + task_lists_group_id: '492273020504638846' + parent_task_id: null + created_at: '2026-07-10T12:55:58.037Z' + updated_at: '2026-07-10T12:55:58.055Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:58.039Z' + updated_at: '2026-07-10T12:55:58.039Z' + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_completed + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:58.057Z' + updated_at: '2026-07-10T12:55:58.057Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + operationId: post_administration_id_task_list_tasks_task_list_task_id_completion + delete: + summary: Reopens a task + description: |- + Reopens a completed task and possible parent tasks. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_task_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Task reopened + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_task_response' + examples: + ReopensTheTask: + summary: Reopens the task + value: + id: '492273019980350753' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492273019978253600' + parent_task_id: null + created_at: '2026-07-10T12:55:57.535Z' + updated_at: '2026-07-10T12:55:57.560Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:57.537Z' + updated_at: '2026-07-10T12:55:57.537Z' + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_completed + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:57.545Z' + updated_at: '2026-07-10T12:55:57.545Z' + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_reopened + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:55:57.562Z' + updated_at: '2026-07-10T12:55:57.562Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + operationId: delete_administration_id_task_list_tasks_task_list_task_id_completion + /{administration_id}/task_list_tasks/{task_list_task_id}/notes{format}: + post: + summary: Creates a note on a task + description: |- + Creates a new note on the specified task. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_task_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: The note content + todo: + type: boolean + description: Whether the note is a to-do item + required: + - note + examples: + CreatesANote: + summary: Creates a note + value: + note: + note: Test note + todo: false + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreatesANote: + summary: Creates a note + value: + id: '492273019856618770' + administration_id: 123 + entity_id: '492273019834598672' + entity_type: TaskLists::Task + user_id: '492272801297728613' + assignee_id: null + todo: false + note: Test note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:55:57.418Z' + updated_at: '2026-07-10T12:55:57.418Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskDoesNotExist: + summary: Returns 404 when task does not exist + value: + error: 'Record not found for model name: Task' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNoteIsEmpty: + summary: Returns 422 when note is empty + value: + error: + note: + - can't be blank + todo_type: + - can't be blank + details: + note: + - error: blank + todo_type: + - error: blank + operationId: post_administration_id_task_list_tasks_task_list_task_id_notes + /{administration_id}/task_list_templates/{id}{format}: + get: + summary: Returns information about a task list template + description: |- + Returns information about a task list template, including its groups and tasks. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task list templates + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A task list template + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_template_response' + examples: + ReturnsASingleTemplate: + summary: Returns a single template + value: + id: '492272932036281540' + administration_id: 123 + name: 'Task list template #1' + description: Template description + period: P1M + deadline_after: null + created_at: '2026-07-10T12:54:33.666Z' + updated_at: '2026-07-10T12:54:33.666Z' + groups: + - id: '492272932039427270' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:54:33.669Z' + updated_at: '2026-07-10T12:54:33.669Z' + tasks: + - id: '492272932040475847' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272932039427270' + parent_task_id: null + created_at: '2026-07-10T12:54:33.670Z' + updated_at: '2026-07-10T12:54:33.670Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:33.671Z' + updated_at: '2026-07-10T12:54:33.671Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTemplateDoesNotExist: + summary: Returns 404 when template does not exist + value: + error: 'Record not found for model name: List template' + operationId: get_administration_id_task_list_templates_id + patch: + summary: Updates a task list template + description: |- + Updates a task list template. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task list templates + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + task_list_template: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: + type: string + period: + type: string + description: ISO 8601 duration string (e.g. P1M, P3M, P1Y) or friendly name (monthly, quarterly, yearly, none) + deadline_after: + type: string + description: ISO 8601 duration string representing the deadline offset from the period end + examples: + UpdatesATemplate: + summary: Updates a template + value: + task_list_template: + name: Updated Template + responses: + '200': + description: Template updated + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_template_response' + examples: + UpdatesATemplate: + summary: Updates a template + value: + id: '492272932083467465' + administration_id: 123 + name: Updated Template + description: Template description + period: P1M + deadline_after: null + created_at: '2026-07-10T12:54:33.710Z' + updated_at: '2026-07-10T12:54:33.736Z' + groups: + - id: '492272932086613195' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:54:33.714Z' + updated_at: '2026-07-10T12:54:33.714Z' + tasks: + - id: '492272932087661772' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272932086613195' + parent_task_id: null + created_at: '2026-07-10T12:54:33.715Z' + updated_at: '2026-07-10T12:54:33.715Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:33.716Z' + updated_at: '2026-07-10T12:54:33.716Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenRequiredParamsAreMissing: + summary: Returns 400 when required params are missing + value: + error: task_list_template is missing + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTemplateDoesNotExist: + summary: Returns 404 when template does not exist + value: + error: 'Record not found for model name: List template' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNameIsEmpty: + summary: Returns 422 when name is empty + value: + error: Name can't be blank + operationId: patch_administration_id_task_list_templates_id + delete: + summary: Deletes a task list template + description: |- + Permanently deletes a task list template and all its groups and tasks. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task list templates + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Template deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTemplateDoesNotExist: + summary: Returns 404 when template does not exist + value: + error: 'Record not found for model name: List template' + operationId: delete_administration_id_task_list_templates_id + /{administration_id}/task_list_templates/{task_list_template_id}/groups{format}: + post: + summary: Creates a new group in a task list template + description: |- + Creates a new group in the specified task list template. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task list templates + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_template_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + group: + type: object + unevaluatedProperties: false + properties: + name: + type: string + report_type: + type: string + enum: + - balance_sheet + - profit_loss + - debtor + - creditor + - assets + description: Report this group is based on; its tasks are generated from the report. + required: + - name + examples: + CreatesANewGroup: + summary: Creates a new group + value: + group: + name: New Group + responses: + '201': + description: Group created + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_group_response' + examples: + CreatesANewGroup: + summary: Creates a new group + value: + id: '492272931562325130' + name: New Group + row_order: 1 + report_type: null + created_at: '2026-07-10T12:54:33.213Z' + updated_at: '2026-07-10T12:54:33.213Z' + tasks: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenRequiredParamsAreMissing: + summary: Returns 400 when required params are missing + value: + error: group is missing, group[name] is missing + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTemplateDoesNotExist: + summary: Returns 404 when template does not exist + value: + error: 'Record not found for model name: List template' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNameIsMissing: + summary: Returns 422 when name is missing + value: + error: Name can't be blank + operationId: post_administration_id_task_list_templates_task_list_template_id_groups + /{administration_id}/task_list_templates/{task_list_template_id}/task_lists{format}: + post: + summary: Creates a task list from a template + description: |- + Creates a new task list based on the specified template. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_template_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: false + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + task_list: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: + type: string + deadline_on: + type: string + format: date + period_begin: + type: string + format: date + period_end: + type: string + format: date + examples: + CreatesATaskListFromTheTemplate: + summary: Creates a task list from the template + value: {} + responses: + '201': + description: Task list created + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_response' + examples: + CreatesATaskListFromTheTemplate: + summary: Creates a task list from the template + value: + id: '492272931925132469' + administration_id: 123 + name: 'Task list template #1' + description: Template description + deadline_on: null + period_begin: '2026-06-01' + period_end: '2026-06-30' + completed: false + template_id: '492272931888432304' + total_tasks_count: 1 + completed_tasks_count: 0 + created_at: '2026-07-10T12:54:33.559Z' + updated_at: '2026-07-10T12:54:33.559Z' + groups: + - id: '492272931928278199' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:54:33.563Z' + updated_at: '2026-07-10T12:54:33.563Z' + tasks: + - id: '492272931929326776' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272931928278199' + parent_task_id: null + created_at: '2026-07-10T12:54:33.563Z' + updated_at: '2026-07-10T12:54:33.563Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:33.565Z' + updated_at: '2026-07-10T12:54:33.565Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenParamsAreInvalidType: + summary: Returns 400 when params are invalid type + value: + error: task_list is invalid + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTemplateDoesNotExist: + summary: Returns 404 when template does not exist + value: + error: 'Record not found for model name: List template' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenTaskListParamsAreInvalid: + summary: Returns 422 when task list params are invalid + value: + error: Name can't be blank + operationId: post_administration_id_task_list_templates_task_list_template_id_task_lists + /{administration_id}/task_list_templates{format}: + get: + summary: List all task list templates of an administration + description: |- + Returns all task list templates in the administration. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task list templates + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of task list templates + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/task_list_template_response' + examples: + ReturnsTheListOfTemplates: + summary: Returns the list of templates + value: + - id: '492272932259628254' + administration_id: 123 + name: 'Task list template #1' + description: Template description + period: P1M + deadline_after: null + created_at: '2026-07-10T12:54:33.878Z' + updated_at: '2026-07-10T12:54:33.878Z' + groups: + - id: '492272932262773984' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:54:33.882Z' + updated_at: '2026-07-10T12:54:33.882Z' + tasks: + - id: '492272932263822561' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272932262773984' + parent_task_id: null + created_at: '2026-07-10T12:54:33.883Z' + updated_at: '2026-07-10T12:54:33.883Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:54:33.884Z' + updated_at: '2026-07-10T12:54:33.884Z' + operationId: get_administration_id_task_list_templates + post: + summary: Creates a new task list template + description: |- + Creates a new task list template. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task list templates + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + task_list_template: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: + type: string + period: + type: string + description: ISO 8601 duration string (e.g. P1M, P3M, P1Y) or friendly name (monthly, quarterly, yearly, none) + deadline_after: + type: string + description: ISO 8601 duration string representing the deadline offset from the period end + required: + - name + examples: + CreatesANewTemplate: + summary: Creates a new template + value: + task_list_template: + name: New Template + responses: + '201': + description: Template created + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_template_response' + examples: + CreatesANewTemplate: + summary: Creates a new template + value: + id: '492272932376020205' + administration_id: 123 + name: New Template + description: null + period: P1M + deadline_after: null + created_at: '2026-07-10T12:54:33.990Z' + updated_at: '2026-07-10T12:54:33.990Z' + groups: + - id: '492272932379165935' + name: null + row_order: 0 + report_type: null + created_at: '2026-07-10T12:54:33.993Z' + updated_at: '2026-07-10T12:54:33.993Z' + tasks: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenRequiredParamsAreMissing: + summary: Returns 400 when required params are missing + value: + error: task_list_template is missing, task_list_template[name] is missing + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNameIsMissing: + summary: Returns 422 when name is missing + value: + error: Name can't be blank + operationId: post_administration_id_task_list_templates + /{administration_id}/task_lists/{id}{format}: + get: + summary: Returns information about a task list + description: |- + Returns information about a task list, including its groups, tasks, and subtasks. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A task list + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_response' + examples: + ReturnsASingleTaskList: + summary: Returns a single task list + value: + id: '492272867459728432' + administration_id: 123 + name: 'Task list #1' + description: List description + deadline_on: null + period_begin: '2026-04-01' + period_end: '2026-06-30' + completed: false + template_id: null + total_tasks_count: 1 + completed_tasks_count: 0 + created_at: '2026-07-10T12:53:32.081Z' + updated_at: '2026-07-10T12:53:32.081Z' + groups: + - id: '492272867463922738' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:53:32.084Z' + updated_at: '2026-07-10T12:53:32.084Z' + tasks: + - id: '492272867464971315' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272867463922738' + parent_task_id: null + created_at: '2026-07-10T12:53:32.085Z' + updated_at: '2026-07-10T12:53:32.085Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:32.087Z' + updated_at: '2026-07-10T12:53:32.087Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskListDoesNotExist: + summary: Returns 404 when task list does not exist + value: + error: 'Record not found for model name: List' + operationId: get_administration_id_task_lists_id + patch: + summary: Updates a task list + description: |- + Updates a task list's name, description, or deadline. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + task_list: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: + type: string + deadline_on: + type: string + format: date + required: [] + examples: + UpdatesATaskList: + summary: Updates a task list + value: + task_list: + name: Updated Name + responses: + '200': + description: Task list updated + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_response' + examples: + UpdatesATaskList: + summary: Updates a task list + value: + id: '492272867546760250' + administration_id: 123 + name: Updated Name + description: List description + deadline_on: null + period_begin: '2026-04-01' + period_end: '2026-06-30' + completed: false + template_id: null + total_tasks_count: 1 + completed_tasks_count: 0 + created_at: '2026-07-10T12:53:32.164Z' + updated_at: '2026-07-10T12:53:32.183Z' + groups: + - id: '492272867550954556' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:53:32.167Z' + updated_at: '2026-07-10T12:53:32.167Z' + tasks: + - id: '492272867552003133' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272867550954556' + parent_task_id: null + created_at: '2026-07-10T12:53:32.168Z' + updated_at: '2026-07-10T12:53:32.168Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:32.170Z' + updated_at: '2026-07-10T12:53:32.170Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400WhenTheGivenParametersAreInvalid: + summary: Returns a 400 when the given parameters are invalid + value: + error: task_list is missing + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskListDoesNotExist: + summary: Returns 404 when task list does not exist + value: + error: 'Record not found for model name: List' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNameIsEmpty: + summary: Returns 422 when name is empty + value: + error: Name can't be blank + operationId: patch_administration_id_task_lists_id + delete: + summary: Deletes a task list + description: |- + Permanently deletes a task list and all its groups and tasks. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Task list deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskListDoesNotExist: + summary: Returns 404 when task list does not exist + value: + error: 'Record not found for model name: List' + operationId: delete_administration_id_task_lists_id + /{administration_id}/task_lists/{task_list_id}/groups{format}: + post: + summary: Creates a new group in a task list + description: |- + Creates a new group in the specified task list. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: task_list_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + group: + type: object + unevaluatedProperties: false + properties: + name: + type: string + report_type: + type: string + enum: + - balance_sheet + - profit_loss + - debtor + - creditor + - assets + description: Report this group is based on; its tasks are generated from the report. + required: + - name + required: [] + examples: + CreatesANewGroup: + summary: Creates a new group + value: + group: + name: New Group + responses: + '201': + description: Group created + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_group_response' + examples: + CreatesANewGroup: + summary: Creates a new group + value: + id: '492272866842118124' + name: New Group + row_order: 1 + report_type: null + created_at: '2026-07-10T12:53:31.491Z' + updated_at: '2026-07-10T12:53:31.491Z' + tasks: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400WhenTheGivenParametersAreInvalid: + summary: Returns a 400 when the given parameters are invalid + value: + error: group is missing, group[name] is missing + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTaskListDoesNotExist: + summary: Returns 404 when task list does not exist + value: + error: 'Record not found for model name: List' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNameIsMissing: + summary: Returns 422 when name is missing + value: + error: Name can't be blank + operationId: post_administration_id_task_lists_task_list_id_groups + /{administration_id}/task_lists{format}: + get: + summary: List all task lists of an administration + description: |- + Returns a paginated list of task lists in the administration. Each page contains 30 task lists by default. Use the `page` parameter to fetch the next page. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - $ref: '#/components/parameters/per_page' + description: 'Amount of task lists per page, default: 30' + - $ref: '#/components/parameters/page' + description: The page to fetch, starting at 1. + responses: + '200': + description: A list of task lists + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/task_list_response' + examples: + FetchesWithoutPageAndPerPageAttributesUsingDefaultValues: + summary: Fetches without page and per page attributes, using default values + value: + - id: '492272867103212552' + administration_id: 123 + name: 'Task list #1' + description: List description + deadline_on: null + period_begin: '2026-04-01' + period_end: '2026-06-30' + completed: false + template_id: null + total_tasks_count: 1 + completed_tasks_count: 0 + created_at: '2026-07-10T12:53:31.740Z' + updated_at: '2026-07-10T12:53:31.740Z' + groups: + - id: '492272867106358282' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:53:31.743Z' + updated_at: '2026-07-10T12:53:31.743Z' + tasks: + - id: '492272867107406859' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272867106358282' + parent_task_id: null + created_at: '2026-07-10T12:53:31.744Z' + updated_at: '2026-07-10T12:53:31.744Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:31.746Z' + updated_at: '2026-07-10T12:53:31.746Z' + RequestsWithADifferentPage: + summary: Requests with a different page + value: [] + RequestsWithAPageSizeLargerThanDefault: + summary: Requests with a page size larger than default + value: + - id: '492272867278324764' + administration_id: 123 + name: 'Task list #1' + description: List description + deadline_on: null + period_begin: '2026-04-01' + period_end: '2026-06-30' + completed: false + template_id: null + total_tasks_count: 1 + completed_tasks_count: 0 + created_at: '2026-07-10T12:53:31.907Z' + updated_at: '2026-07-10T12:53:31.907Z' + groups: + - id: '492272867281470494' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:53:31.911Z' + updated_at: '2026-07-10T12:53:31.911Z' + tasks: + - id: '492272867282519071' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272867281470494' + parent_task_id: null + created_at: '2026-07-10T12:53:31.912Z' + updated_at: '2026-07-10T12:53:31.912Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:31.914Z' + updated_at: '2026-07-10T12:53:31.914Z' + RequestsWithAPageSizeSmallerThanDefault: + summary: Requests with a page size smaller than default + value: + - id: '492272867369550886' + administration_id: 123 + name: 'Task list #1' + description: List description + deadline_on: null + period_begin: '2026-04-01' + period_end: '2026-06-30' + completed: false + template_id: null + total_tasks_count: 1 + completed_tasks_count: 0 + created_at: '2026-07-10T12:53:31.995Z' + updated_at: '2026-07-10T12:53:31.995Z' + groups: + - id: '492272867373745192' + name: 'Task list group #1' + row_order: 0 + report_type: null + created_at: '2026-07-10T12:53:31.998Z' + updated_at: '2026-07-10T12:53:31.998Z' + tasks: + - id: '492272867374793769' + administration_id: 123 + name: 'Task #1' + description: Description 1 + row_order: 0 + completed_at: null + report_type: null + task_lists_group_id: '492272867373745192' + parent_task_id: null + created_at: '2026-07-10T12:53:31.999Z' + updated_at: '2026-07-10T12:53:31.999Z' + assignee_id: null + subtasks: [] + notes: [] + events: + - administration_id: 123 + user_id: '492272801297728613' + action: task_lists_task_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:32.001Z' + updated_at: '2026-07-10T12:53:32.001Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns400WhenPerPageExceedsMaximum: + summary: Returns 400 when per page exceeds maximum + value: + error: per_page does not have a valid value + Returns400WhenPageIsInvalid: + summary: Returns 400 when page is invalid + value: + error: page is invalid, page does not have a valid value + Returns400WhenPerPageIsInvalid: + summary: Returns 400 when per page is invalid + value: + error: per_page is invalid, per_page does not have a valid value + operationId: get_administration_id_task_lists + post: + summary: Creates a new task list + description: |- + Creates a new task list. Optionally, you can provide a template_id to create the task list from a template. + + ### Required scope(s) + All of: `bank`, `documents`, `estimates`, `sales_invoices`, `settings` and `time_entries` + tags: + - Task lists + security: + - bearerAuth: + - bank + - documents + - estimates + - sales_invoices + - settings + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + task_list: + type: object + unevaluatedProperties: false + properties: + name: + type: string + description: + type: string + deadline_on: + type: string + format: date + period_begin: + type: string + format: date + period_end: + type: string + format: date + template_id: + $ref: '#/components/schemas/identifier' + description: ID of a task list template to create the list from + required: + - name + examples: + CreatesANewTaskList: + summary: Creates a new task list + value: + task_list: + name: New Task List + responses: + '201': + description: Task list created + content: + application/json: + schema: + $ref: '#/components/schemas/task_list_response' + examples: + CreatesANewTaskList: + summary: Creates a new task list + value: + id: '492272867792127065' + administration_id: 123 + name: New Task List + description: null + deadline_on: null + period_begin: '2026-06-01' + period_end: '2026-06-30' + completed: true + template_id: null + total_tasks_count: 0 + completed_tasks_count: 0 + created_at: '2026-07-10T12:53:32.397Z' + updated_at: '2026-07-10T12:53:32.397Z' + groups: + - id: '492272867796321371' + name: null + row_order: 0 + report_type: null + created_at: '2026-07-10T12:53:32.401Z' + updated_at: '2026-07-10T12:53:32.401Z' + tasks: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA400WhenTheGivenParametersAreInvalid: + summary: Returns a 400 when the given parameters are invalid + value: + error: task_list is missing, task_list[name] is missing + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenNameIsMissing: + summary: Returns 422 when name is missing + value: + error: Name can't be blank + operationId: post_administration_id_task_lists + /{administration_id}/tax_rates{format}: + get: + summary: List all available tax rates for the administration + description: |- + Returns a paginated list of all available tax rates for the administration + + ### Required scope(s) + `settings` + tags: + - Tax rates + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `percentage:21,tax_rate_type:sales_invoice`). Any filter you pass replaces the defaults below entirely, so include every key you need. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | --- | --- | --- | --- | + | name | `String` | | Select tax rates by their full name | + | partial_name | `String` | | Select tax rates with this substring in their name | + | percentage | `Integer` | | Select tax rates with the specified percentage, e.g. specify `21` for 21% | + | tax_rate_type | `String` | `all` | `all`, `general_journal_document`, `purchase_invoice` or `sales_invoice` | + | country | `String` | | Select tax rates with the specified country. Must be a 2 letter abbreviation following ISO 3166. Please note that only foreign tax rates will have this field set. Domestic tax rates will not have this set at the moment. | + | show_tax | `Boolean` | | Use `true` to tax rates for which tax is shown on the invoice, `false` for when it's not shown. No value will select both | + | active | `Boolean` | | Use `true` to select active tax rates. Use `false` for inactive tax rates. No value will select both | + | created_after | `String` | | Tax rates created after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | + | updated_after | `String` | | Tax rates updated after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | + + You can filter by multiple tax rate types at the same time by separating the values with a pipe (`tax_rate_type:purchase_invoice|sales_invoice`). + schema: + type: string + examples: + ReturnsAllTaxRatesCreatedAfterGivenDatetime: + summary: Returns all tax rates created after given datetime + value: created_after:2026-07-09 12:56:24 UTC + ReturnsAllTaxRatesFilteredOnPercentage: + summary: Returns all tax rates filtered on percentage + value: percentage:21 + ReturnsOnlyTaxRatesUpdatedAfterGivenDatetime: + summary: Returns only tax rates updated after given datetime + value: updated_after:2026-07-10 12:56:29 UTC + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + responses: + '200': + description: A list of tax rates + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/tax_rate_response' + examples: + ReturnsAllTaxRatesCreatedAfterGivenDatetime: + summary: Returns all tax rates created after given datetime + value: + - id: '492272802314847370' + administration_id: 123 + name: 21% btw + percentage: '21.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.948Z' + updated_at: '2026-07-10T12:52:29.948Z' + - id: '492272802325333131' + administration_id: 123 + name: 9% btw + percentage: '9.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.962Z' + updated_at: '2026-07-10T12:52:29.962Z' + - id: '492272802327430284' + administration_id: 123 + name: 0% btw + percentage: '0.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.965Z' + updated_at: '2026-07-10T12:52:29.965Z' + - id: '492272802329527437' + administration_id: 123 + name: 21% btw + percentage: '21.0' + tax_rate_type: purchase_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.967Z' + updated_at: '2026-07-10T12:52:29.967Z' + - id: '492272802331624590' + administration_id: 123 + name: 9% btw + percentage: '9.0' + tax_rate_type: purchase_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.970Z' + updated_at: '2026-07-10T12:52:29.970Z' + ReturnsPaginatedTaxRatesOnPage2: + summary: Returns paginated tax rates on page 2 + value: + - id: '492272802325333131' + administration_id: 123 + name: 9% btw + percentage: '9.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.962Z' + updated_at: '2026-07-10T12:52:29.962Z' + ReturnsAllTaxRatesFilteredOnPercentage: + summary: Returns all tax rates filtered on percentage + value: + - id: '492272802314847370' + administration_id: 123 + name: 21% btw + percentage: '21.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.948Z' + updated_at: '2026-07-10T12:52:29.948Z' + - id: '492272802329527437' + administration_id: 123 + name: 21% btw + percentage: '21.0' + tax_rate_type: purchase_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.967Z' + updated_at: '2026-07-10T12:52:29.967Z' + ReturnsAllTaxRatesOfAnAdministration: + summary: Returns all tax rates of an administration + value: + - id: '492272802314847370' + administration_id: 123 + name: 21% btw + percentage: '21.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.948Z' + updated_at: '2026-07-10T12:52:29.948Z' + - id: '492272802325333131' + administration_id: 123 + name: 9% btw + percentage: '9.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.962Z' + updated_at: '2026-07-10T12:52:29.962Z' + - id: '492272802327430284' + administration_id: 123 + name: 0% btw + percentage: '0.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.965Z' + updated_at: '2026-07-10T12:52:29.965Z' + - id: '492272802329527437' + administration_id: 123 + name: 21% btw + percentage: '21.0' + tax_rate_type: purchase_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.967Z' + updated_at: '2026-07-10T12:52:29.967Z' + - id: '492272802331624590' + administration_id: 123 + name: 9% btw + percentage: '9.0' + tax_rate_type: purchase_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.970Z' + updated_at: '2026-07-10T12:52:29.970Z' + ReturnsOnlyTaxRatesUpdatedAfterGivenDatetime: + summary: Returns only tax rates updated after given datetime + value: + - id: '492272802314847370' + administration_id: 123 + name: foo + percentage: '21.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.948Z' + updated_at: '2026-07-10T12:57:29.589Z' + ReturnsPaginatedTaxRatesOnPage1: + summary: Returns paginated tax rates on page 1 + value: + - id: '492272802314847370' + administration_id: 123 + name: 21% btw + percentage: '21.0' + tax_rate_type: sales_invoice + show_tax: true + active: true + country: null + created_at: '2026-07-10T12:52:29.948Z' + updated_at: '2026-07-10T12:52:29.948Z' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyTaxRatesAreRequested: + summary: Returns an error when too many tax rates are requested + value: + error: per_page does not have a valid value + operationId: get_administration_id_tax_rates + /{administration_id}/time_entries/{id}/resume{format}: + patch: + summary: Resume a stopped timer + description: |- + Resumes a stopped time entry. If another time entry is currently active, it will be stopped first. Can only resume timers that started today. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Time entry resumed + content: + application/json: + schema: + $ref: '#/components/schemas/time_entry_response' + examples: + ResumesAStoppedTimeEntry: + summary: Resumes a stopped time entry + value: + id: '492272863614600874' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T11:53:00.000Z' + ended_at: null + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:28.413Z' + updated_at: '2026-07-10T12:53:28.433Z' + contact: null + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:28.415Z' + updated_at: '2026-07-10T12:53:28.415Z' + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_updated + link_entity_id: null + link_entity_type: null + data: + ended_at: + - '2026-07-10T14:53:00.000+02:00' + - null + updated_at: + - '2026-07-10T14:53:28.413+02:00' + - '2026-07-10T14:53:28.433+02:00' + created_at: '2026-07-10T12:53:28.435Z' + updated_at: '2026-07-10T12:53:28.435Z' + notes: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTimeEntryDoesNotExist: + summary: Returns 404 when time entry does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsA422IfTheTimeEntryCannotBeResumed: + summary: Returns a 422 if the time entry cannot be resumed + value: + error: + base: + - Cannot resume timer + details: + base: + - error: cannot_resume_timer + operationId: patch_administration_id_time_entries_id_resume + /{administration_id}/time_entries/{id}/stop{format}: + patch: + summary: Stops an active time entry + description: |- + Stops an active time entry. If the time entry is already stopped, the time entry is returned unchanged. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Time entry stopped + content: + application/json: + schema: + $ref: '#/components/schemas/time_entry_response' + examples: + StopsAnActiveTimeEntry: + summary: Stops an active time entry + value: + id: '492272863415371422' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T12:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:28.224Z' + updated_at: '2026-07-10T12:53:28.242Z' + contact: null + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:28.226Z' + updated_at: '2026-07-10T12:53:28.226Z' + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_updated + link_entity_id: null + link_entity_type: null + data: + ended_at: + - null + - '2026-07-10T14:53:00.000+02:00' + updated_at: + - '2026-07-10T14:53:28.224+02:00' + - '2026-07-10T14:53:28.242+02:00' + created_at: '2026-07-10T12:53:28.244Z' + updated_at: '2026-07-10T12:53:28.244Z' + notes: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTimeEntryDoesNotExist: + summary: Returns 404 when time entry does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: patch_administration_id_time_entries_id_stop + /{administration_id}/time_entries/{id}{format}: + get: + summary: Get a time entry by id + description: |- + Returns a time entry in the administration. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A time entry + content: + application/json: + schema: + $ref: '#/components/schemas/time_entry_response' + examples: + ReturnsTimeEntryByGivenId: + summary: Returns time entry by given id + value: + id: '492272863336728214' + administration_id: 123 + contact_id: '492272863325193875' + project_id: '492272863329388180' + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:28.149Z' + updated_at: '2026-07-10T12:53:28.149Z' + contact: + id: '492272863325193875' + firstname: null + lastname: null + company_name: Foobar Holding B.V. + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: + id: '492272863329388180' + name: Project 1 + state: active + budget: 10 + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:28.150Z' + updated_at: '2026-07-10T12:53:28.150Z' + notes: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTimeEntryDoesNotExist: + summary: Returns 404 when time entry does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: get_administration_id_time_entries_id + patch: + summary: Update a time entry + description: |- + When updating a time entry, provide only the attributes you want to update. The other attributes will not be changed. + `started_at` and `ended_at` are rounded down to full minutes when updating a time entry, with a minimum of 1 minute between them. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + time_entry: + type: object + unevaluatedProperties: false + properties: + started_at: + type: string + format: date-time + description: The start time of the time entry. Rounded down to full minutes. + ended_at: + type: string + format: date-time + description: The end time of the time entry. Rounded down to full minutes. A time entry without `ended_at` is considered a running (active) time entry. + paused_duration: + type: integer + description: Total paused duration in seconds, is rounded down to full minutes. + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + project_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid project id. + sales_invoice_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid sales invoice id. + description: + type: string + description: A description of how the time was spent. May be shown on the invoice. + billable: + type: + - boolean + - string + description: Whether this time entry is billable to the client. + default: true + required: [] + required: [] + examples: + UpdatingTheTimeEntryDescription: + summary: Updating the time entry description + value: + time_entry: + description: Updated description + responses: + '200': + description: Time entry updated + content: + application/json: + schema: + $ref: '#/components/schemas/time_entry_response' + examples: + UpdatingTheTimeEntryDescription: + summary: Updating the time entry description + value: + id: '492272863249696399' + administration_id: 123 + contact_id: '492272863237113484' + project_id: '492272863241307789' + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Updated description + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:28.066Z' + updated_at: '2026-07-10T12:53:28.083Z' + contact: + id: '492272863237113484' + firstname: null + lastname: null + company_name: Foobar Holding B.V. + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: + id: '492272863241307789' + name: Project 1 + state: active + budget: 10 + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:28.067Z' + updated_at: '2026-07-10T12:53:28.067Z' + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_updated + link_entity_id: null + link_entity_type: null + data: + description: + - Designing the website + - Updated description + updated_at: + - '2026-07-10T14:53:28.066+02:00' + - '2026-07-10T14:53:28.083+02:00' + created_at: '2026-07-10T12:53:28.085Z' + updated_at: '2026-07-10T12:53:28.085Z' + notes: [] + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTimeEntryDoesNotExist: + summary: Returns 404 when time entry does not exist + value: + error: record not found + symbolic: + id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenInvalidDataIsProvided: + summary: Returns 422 when invalid data is provided + value: + error: + description: + - can't be blank + details: + description: + - error: blank + operationId: patch_administration_id_time_entries_id + delete: + summary: Delete a time entry + description: |- + Delete a time entry by id. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Time entry deleted + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenTimeEntryDoesNotExist: + summary: Returns 404 when time entry does not exist + value: + error: record not found + symbolic: + id: not_found + operationId: delete_administration_id_time_entries_id + /{administration_id}/time_entries/{time_entry_id}/notes/{id}{format}: + delete: + summary: Destroys note from entity + description: |- + Deletes a note from a time entry. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: time_entry_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Note deleted + operationId: delete_administration_id_time_entries_time_entry_id_notes_id + /{administration_id}/time_entries/{time_entry_id}/notes{format}: + post: + summary: Adds note to entity + description: |- + Adds a note to the time entry. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - name: time_entry_id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + note: + type: object + unevaluatedProperties: false + properties: + note: + type: string + description: '**Required**. Text for the note or to-do.' + todo: + type: + - boolean + - string + description: If `true` the note is a to-do. + assignee_id: + $ref: '#/components/schemas/identifier' + description: Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. + required: [] + required: [] + examples: + CreateANote: + summary: Create a note + value: + note: + note: Text of the note + assignee_id: 492272861734503940 + todo: true + responses: + '201': + description: Note created + content: + application/json: + schema: + $ref: '#/components/schemas/note_response' + examples: + CreateANote: + summary: Create a note + value: + id: '492272861775398408' + administration_id: 123 + entity_id: '492272861756524038' + entity_type: TimeEntry + user_id: '492272801297728613' + assignee_id: '492272861734503936' + todo: true + note: Text of the note + completed_at: null + completed_by_id: null + todo_type: null + data: {} + created_at: '2026-07-10T12:53:26.659Z' + updated_at: '2026-07-10T12:53:26.659Z' + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + Returns422WhenInvalidNoteDataIsProvided: + summary: Returns 422 when invalid note data is provided + value: + error: + note: + - can't be blank + todo_type: + - can't be blank + details: + note: + - error: blank + todo_type: + - error: blank + operationId: post_administration_id_time_entries_time_entry_id_notes + /{administration_id}/time_entries{format}: + get: + summary: List all time entries + description: |- + Returns a paginated list of time entries in the administration. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: filter + in: query + required: false + description: |- + Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: + + | **Filter** | **Type** | **Default** | **Description** | + | --- | --- | --- | --- | + | state | `String` | `all` | `all`, `open` or `non_billable` | + | period | `String` | `this_year` | This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | + | contact_id | `Integer` | | Select time entries belonging to a certain contact | + | include_nil_contacts | `Boolean` | false | Whether to include time entries that have no assigned contact | + | include_active | `Boolean` | false | Whether to include active time entries i.e. time entries without ended_at | + | project_id | `Integer` | | Select time entries belonging to a certain project | + | user_id | `Integer` | | Select time entries belonging to a certain user | + | day | `Date` | | Select time entries on a specific date | + + You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:open|non_billable`. + schema: + type: string + default: period:this_year + examples: + ReturnsAllTimeEntriesFilteredOnState: + summary: Returns all time entries filtered on state + value: state:non_billable + ReturnsAllTimeEntriesFilteredOnPeriod: + summary: Returns all time entries filtered on period + value: period:this_month + - $ref: '#/components/parameters/page' + - $ref: '#/components/parameters/per_page' + - name: query + in: query + required: false + schema: + type: string + description: Allows filtering by time entry description. + examples: + ReturnsAllTimeEntriesFilteredOnSearchQuery: + summary: Returns all time entries filtered on search query + value: Custom + responses: + '200': + description: A list of time entries + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/time_entry_response' + examples: + ReturnsAllTimeEntriesFilteredOnState: + summary: Returns all time entries filtered on state + value: + - id: '492272862075291189' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: 1 + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: false + created_at: '2026-07-10T12:53:26.945Z' + updated_at: '2026-07-10T12:53:26.945Z' + contact: null + user: + id: 1 + name: Edwin Vlieg + created_at: '2026-07-10T12:53:26.937Z' + updated_at: '2026-07-10T12:53:26.942Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: 1 + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:26.947Z' + updated_at: '2026-07-10T12:53:26.947Z' + notes: [] + ReturnsPaginatedTimeEntriesOnPage1: + summary: Returns paginated time entries on page 1 + value: + - id: '492272862148691518' + administration_id: 123 + contact_id: '492272862136108603' + project_id: '492272862140302908' + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:27.016Z' + updated_at: '2026-07-10T12:53:27.016Z' + contact: + id: '492272862136108603' + firstname: null + lastname: null + company_name: Foobar Holding B.V. + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: + id: '492272862140302908' + name: Project 1 + state: active + budget: 10 + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.017Z' + updated_at: '2026-07-10T12:53:27.017Z' + notes: [] + ReturnsPaginatedTimeEntriesOnPage2: + summary: Returns paginated time entries on page 2 + value: + - id: '492272862255646285' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: 1 + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: false + created_at: '2026-07-10T12:53:27.118Z' + updated_at: '2026-07-10T12:53:27.118Z' + contact: null + user: + id: 1 + name: Edwin Vlieg + created_at: '2026-07-10T12:53:27.110Z' + updated_at: '2026-07-10T12:53:27.114Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: 1 + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.120Z' + updated_at: '2026-07-10T12:53:27.120Z' + notes: [] + ReturnsAllTimeEntriesFilteredOnPeriod: + summary: Returns all time entries filtered on period + value: + - id: '492272862323803734' + administration_id: 123 + contact_id: '492272862311220819' + project_id: '492272862315415124' + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:27.183Z' + updated_at: '2026-07-10T12:53:27.183Z' + contact: + id: '492272862311220819' + firstname: null + lastname: null + company_name: Foobar Holding B.V. + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: + id: '492272862315415124' + name: Project 1 + state: active + budget: 10 + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.184Z' + updated_at: '2026-07-10T12:53:27.184Z' + notes: [] + - id: '492272862341629529' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: 1 + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: false + created_at: '2026-07-10T12:53:27.200Z' + updated_at: '2026-07-10T12:53:27.200Z' + contact: null + user: + id: 1 + name: Edwin Vlieg + created_at: '2026-07-10T12:53:27.192Z' + updated_at: '2026-07-10T12:53:27.197Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: 1 + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.202Z' + updated_at: '2026-07-10T12:53:27.202Z' + notes: [] + - id: '492272862359455324' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: 2 + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:27.217Z' + updated_at: '2026-07-10T12:53:27.217Z' + contact: null + user: + id: 2 + name: Edwin Vlieg + created_at: '2026-07-10T12:53:27.209Z' + updated_at: '2026-07-10T12:53:27.213Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: 2 + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.218Z' + updated_at: '2026-07-10T12:53:27.218Z' + notes: [] + ReturnsAllTimeEntriesFilteredOnSearchQuery: + summary: Returns all time entries filtered on search query + value: + - id: '492272862933026414' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: 3 + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Custom description + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:27.763Z' + updated_at: '2026-07-10T12:53:27.763Z' + contact: null + user: + id: 3 + name: Edwin Vlieg + created_at: '2026-07-10T12:53:27.755Z' + updated_at: '2026-07-10T12:53:27.760Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: 3 + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.765Z' + updated_at: '2026-07-10T12:53:27.765Z' + notes: [] + ReturnsAllTimeEntriesOfAnAdministration: + summary: Returns all time entries of an administration + value: + - id: '492272863027398260' + administration_id: 123 + contact_id: '492272863014815345' + project_id: '492272863019009650' + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:27.853Z' + updated_at: '2026-07-10T12:53:27.853Z' + contact: + id: '492272863014815345' + firstname: null + lastname: null + company_name: Foobar Holding B.V. + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: + id: '492272863019009650' + name: Project 1 + state: active + budget: 10 + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.855Z' + updated_at: '2026-07-10T12:53:27.855Z' + notes: [] + - id: '492272863044175479' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: 1 + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: false + created_at: '2026-07-10T12:53:27.870Z' + updated_at: '2026-07-10T12:53:27.870Z' + contact: null + user: + id: 1 + name: Edwin Vlieg + created_at: '2026-07-10T12:53:27.862Z' + updated_at: '2026-07-10T12:53:27.866Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: 1 + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.871Z' + updated_at: '2026-07-10T12:53:27.871Z' + notes: [] + - id: '492272863062001274' + administration_id: 123 + contact_id: null + project_id: null + sales_invoice_id: null + user_id: 2 + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Designing the website + paused_duration: 0 + billable: true + created_at: '2026-07-10T12:53:27.886Z' + updated_at: '2026-07-10T12:53:27.886Z' + contact: null + user: + id: 2 + name: Edwin Vlieg + created_at: '2026-07-10T12:53:27.879Z' + updated_at: '2026-07-10T12:53:27.883Z' + project: null + sales_invoice: null + events: + - administration_id: 123 + user_id: 2 + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:27.888Z' + updated_at: '2026-07-10T12:53:27.888Z' + notes: [] + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenTooManyTimeEntriesAreRequested: + summary: Returns an error when too many time entries are requested + value: + error: per_page does not have a valid value + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorMessageIfFilterUserIdIsNotFound: + summary: Returns an error message if filter user id is not found + value: + error: record not found + symbolic: + user_id: not_found + ReturnsAnErrorMessageIfFilterContactIdIsNotFound: + summary: Returns an error message if filter contact id is not found + value: + error: record not found + symbolic: + contact_id: not_found + operationId: get_administration_id_time_entries + post: + summary: Create a time entry + description: |- + API to post a time entry. Used to create time entries to record time spent by an employee. + Api user needs access to both sales invoices and time entries for this action. + `started_at` and `ended_at` are rounded down to full minutes when creating a time entry, with a minimum of 1 minute between them. + + ### Required scope(s) + `time_entries` + tags: + - Time entries + security: + - bearerAuth: + - time_entries + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + time_entry: + type: object + unevaluatedProperties: false + properties: + user_id: + $ref: '#/components/schemas/identifier' + description: The employee for which the time should be entered. Should be a valid user id. + started_at: + $ref: '#/components/schemas/timestamp' + description: The start time of the time entry. Rounded down to full minutes. + ended_at: + $ref: '#/components/schemas/timestamp' + description: The end time of the time entry. Rounded down to full minutes. Omit to create a running (active) time entry. + description: + type: string + description: A description on how the time was spent. May be shown on the invoice. + contact_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid contact id. + project_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid project id. + sales_invoice_id: + $ref: '#/components/schemas/identifier' + description: Should be a valid sales invoice id. + billable: + type: + - boolean + - string + default: true + description: Whether this time entry is billable to the client. + paused_duration: + type: integer + description: Total paused duration in seconds, is rounded down to full minutes. + required: + - user_id + - started_at + - description + required: [] + examples: + CreateABasicTimeEntry: + summary: Create a basic time entry + value: + time_entry: + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Test + contact_id: 492272863734138560 + project_id: 492272863738332860 + user_id: 492272801297728640 + billable: false + responses: + '201': + description: Time entry created + content: + application/json: + schema: + $ref: '#/components/schemas/time_entry_response' + examples: + CreateABasicTimeEntry: + summary: Create a basic time entry + value: + id: '492272863758255793' + administration_id: 123 + contact_id: '492272863734138542' + project_id: '492272863738332847' + sales_invoice_id: null + user_id: '492272801297728613' + started_at: '2026-07-10T12:53:00.000Z' + ended_at: '2026-07-10T13:53:00.000Z' + description: Test + paused_duration: 0 + billable: false + created_at: '2026-07-10T12:53:28.551Z' + updated_at: '2026-07-10T12:53:28.551Z' + contact: + id: '492272863734138542' + firstname: null + lastname: null + company_name: Foobar Holding B.V. + user: + id: '492272801297728613' + name: Moneybird + created_at: '2026-07-10T12:52:28.969Z' + updated_at: '2026-07-10T12:52:29.410Z' + project: + id: '492272863738332847' + name: Project 1 + state: active + budget: 10 + sales_invoice: null + events: + - administration_id: 123 + user_id: '492272801297728613' + action: time_entry_created + link_entity_id: null + link_entity_type: null + data: {} + created_at: '2026-07-10T12:53:28.552Z' + updated_at: '2026-07-10T12:53:28.552Z' + notes: [] + '402': + description: Payment required + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns402WhenLimitIsReached: + summary: Returns 402 when limit is reached + value: + error: creating time entries is limited + symbolic: + administration: limit_reached + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenSalesInvoiceIdDoesNotExist: + summary: Returns 404 when sales invoice id does not exist + value: + error: no sales invoice with given ID found + symbolic: + sales_invoice_id: not_found + '422': + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + examples: + ReturnsAnErrorWhenInvalidDetailsAreProvided: + summary: Returns an error when invalid details are provided + value: + error: + ended_at: + - cannot be before the start time + description: + - can't be blank + details: + ended_at: + - error: ended_at_before_started_at + description: + - error: blank + operationId: post_administration_id_time_entries + /{administration_id}/users{format}: + get: + summary: List all users + description: |- + Returns a list of users within the administration. + + ### Required scope(s) + `settings` + tags: + - Users + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + - name: include_inactive + in: query + required: false + schema: + type: + - boolean + - string + examples: + IncludesInactiveUsersWhenIncludeInactiveIsTrue: + summary: Includes inactive users when include inactive is true + value: 'true' + - name: include_accountants + in: query + required: false + schema: + type: + - boolean + - string + examples: + IncludesAccountsWhenIncludeAccountantsIsTrue: + summary: Includes accounts when include accountants is true + value: 'true' + - name: include_api_users + in: query + required: false + schema: + type: + - boolean + - string + examples: + IncludesApiUsersWhenIncludeApiUsersIsTrue: + summary: Includes api users when include api users is true + value: 'true' + responses: + '200': + description: A list of users + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/extended_user_response' + examples: + IncludesAccountsWhenIncludeAccountantsIsTrue: + summary: Includes accounts when include accountants is true + value: + - id: '492272801322894438' + name: Mo Neybird + created_at: '2026-07-10T12:52:29.004Z' + updated_at: '2026-07-10T12:52:29.435Z' + email: info@moneybird.nl + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: owner + permissions: + - sales_invoices + - documents + - estimates + - bank + - settings + - ownership + - time_entries + - id: '492272982361638723' + name: A. Accountant. + created_at: '2026-07-10T12:55:21.659Z' + updated_at: '2026-07-10T12:55:21.664Z' + email: john+6@example.com + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: accountant + permissions: + - sales_invoices + - documents + - estimates + - bank + - settings + - time_entries + ReturnsAllActiveUsersOfAnAdministration: + summary: Returns all active users of an administration + value: + - id: '492272801322894438' + name: Mo Neybird + created_at: '2026-07-10T12:52:29.004Z' + updated_at: '2026-07-10T12:52:29.435Z' + email: info@moneybird.nl + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: owner + permissions: + - sales_invoices + - documents + - estimates + - bank + - settings + - ownership + - time_entries + - id: '492272982421407557' + name: John Doe + created_at: '2026-07-10T12:55:21.716Z' + updated_at: '2026-07-10T12:55:21.721Z' + email: john+6@example.com + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: employee + permissions: + - time_entries + IncludesInactiveUsersWhenIncludeInactiveIsTrue: + summary: Includes inactive users when include inactive is true + value: + - id: '492272801322894438' + name: Mo Neybird + created_at: '2026-07-10T12:52:29.004Z' + updated_at: '2026-07-10T12:52:29.435Z' + email: info@moneybird.nl + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: owner + permissions: + - sales_invoices + - documents + - estimates + - bank + - settings + - ownership + - time_entries + - id: '492272982480127815' + name: A. User. + created_at: '2026-07-10T12:55:21.772Z' + updated_at: '2026-07-10T12:55:21.784Z' + IncludesApiUsersWhenIncludeApiUsersIsTrue: + summary: Includes api users when include api users is true + value: + - id: '492272801322894438' + name: Mo Neybird + created_at: '2026-07-10T12:52:29.004Z' + updated_at: '2026-07-10T12:52:29.435Z' + email: info@moneybird.nl + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: owner + permissions: + - sales_invoices + - documents + - estimates + - bank + - settings + - ownership + - time_entries + - id: 1 + name: Edwin Vlieg + created_at: '2026-07-10T12:55:21.833Z' + updated_at: '2026-07-10T12:55:21.837Z' + email: example+1@dev.null.moneybird.net + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: api_user + permissions: + - time_entries + DoesNotIncludeApiUsersWhenIncludeApiUsersIsFalse: + summary: Does not include api users when include api users is false + value: + - id: '492272801322894438' + name: Mo Neybird + created_at: '2026-07-10T12:52:29.004Z' + updated_at: '2026-07-10T12:52:29.435Z' + email: info@moneybird.nl + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: owner + permissions: + - sales_invoices + - documents + - estimates + - bank + - settings + - ownership + - time_entries + OnlyIncludesPermissionForUsersWithThisAdministration: + summary: Only includes permission for users with this administration + value: + - id: '492272801322894438' + name: Mo Neybird + created_at: '2026-07-10T12:52:29.004Z' + updated_at: '2026-07-10T12:52:29.435Z' + email: info@moneybird.nl + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: owner + permissions: + - sales_invoices + - documents + - estimates + - bank + - settings + - ownership + - time_entries + - id: '492272982640559947' + name: A. Arend. + created_at: '2026-07-10T12:55:21.925Z' + updated_at: '2026-07-10T12:55:22.170Z' + email: john+6@example.com + email_validated: true + language: nl + time_zone: Europe/Amsterdam + user_type: employee + permissions: + - time_entries + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + examples: + Returns429WhenExceedingTheRateLimit: + summary: Returns 429 when exceeding the rate limit + value: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + operationId: get_administration_id_users + /{administration_id}/verifications{format}: + get: + summary: Retrieve verifications + description: |- + Retrieve all the verifications within an administration. Returns all + verified e-mail addresses and bank account numbers, as well as the + verified chamber of commerce number and tax number. + + ### Required scope(s) + `settings` + tags: + - Verifications + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of verifications + content: + application/json: + schema: + $ref: '#/components/schemas/verification_response' + examples: + IfChamberOfCommerceNumberVerificationIsStillPending: + summary: If chamber of commerce number verification is still pending + value: + emails: + - validated1@dev.null.moneybird.net + - validated2@dev.null.moneybird.net + bank_account_numbers: + - NL42TEST0000000002 + IfBankAccountNumberVerificationsAreStillPending: + summary: If bank account number verifications are still pending + value: + emails: + - validated1@dev.null.moneybird.net + - validated2@dev.null.moneybird.net + chamber_of_commerce_number: '12345678' + tax_number: NL852924574B01 + IfEmailVerificationsAreStillPending: + summary: If email verifications are still pending + value: + bank_account_numbers: + - NL42TEST0000000002 + chamber_of_commerce_number: '12345678' + tax_number: NL852924574B01 + ReturnsAllVerificationsOfAnAdministration: + summary: Returns all verifications of an administration + value: + emails: + - validated1@dev.null.moneybird.net + - validated2@dev.null.moneybird.net + bank_account_numbers: + - NL42TEST0000000002 + chamber_of_commerce_number: '12345678' + tax_number: NL852924574B01 + IfTaxNumberVerificationIsStillPending: + summary: If tax number verification is still pending + value: + emails: + - validated1@dev.null.moneybird.net + - validated2@dev.null.moneybird.net + bank_account_numbers: + - NL42TEST0000000002 + chamber_of_commerce_number: '12345678' + IfNoVerificationsArePresent: + summary: If no verifications are present + value: {} + operationId: get_administration_id_verifications + /{administration_id}/webhooks/{id}/activate{format}: + patch: + summary: Activate a webhook + description: |- + Activates a previously deactivated webhook. After activation, the webhook will resume receiving event notifications. + + ### Required scope(s) + `settings` + tags: + - Webhooks + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Webhook activated + content: + application/json: + schema: + $ref: '#/components/schemas/webhook_response' + examples: + ActivatesAWebhook: + summary: Activates a webhook + value: + id: '492273043701237227' + administration_id: 123 + url: http://example.com/create_webhook + enabled_events: [] + last_http_status: null + last_http_body: null + token: tgVS5BijB1CVfrKeRfKhL8DN + deactivated_at: null + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404WhenTheWebhookCannotBeFound: + summary: Returns a 404 when the webhook cannot be found + value: + error: 'Record not found for model name: Webhook' + operationId: patch_administration_id_webhooks_id_activate + /{administration_id}/webhooks/{id}/deactivate{format}: + patch: + summary: Deactivate a webhook + description: |- + Deactivates a webhook. A deactivated webhook will not receive new event notifications, but existing retries will still be processed. The webhook can be reactivated at any time. + + ### Required scope(s) + `settings` + tags: + - Webhooks + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: Webhook deactivated + content: + application/json: + schema: + $ref: '#/components/schemas/webhook_response' + examples: + DeactivatesAWebhook: + summary: Deactivates a webhook + value: + id: '492273043742131695' + administration_id: 123 + url: http://example.com/create_webhook + enabled_events: [] + last_http_status: null + last_http_body: null + token: 93X9ZS4ptnc2q68SkfVhBW9k + deactivated_at: '2026-07-10T12:56:20.213Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsA404WhenTheWebhookCannotBeFound: + summary: Returns a 404 when the webhook cannot be found + value: + error: 'Record not found for model name: Webhook' + operationId: patch_administration_id_webhooks_id_deactivate + /{administration_id}/webhooks/{id}{format}: + delete: + summary: Delete a webhook + description: |- + Remove a registered webhook. + + ### Required scope(s) + `settings` + tags: + - Webhooks + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '204': + description: Webhook deleted + '404': + $ref: '#/components/responses/404_not_found' + operationId: delete_administration_id_webhooks_id + /{administration_id}/webhooks{format}: + get: + summary: List all webhooks + description: |- + List all registered webhooks for the administration. + + ### Required scope(s) + `settings` + tags: + - Webhooks + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of webhooks + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/webhook_response' + examples: + ReturnsAllWebhooksOfAnAdministration: + summary: Returns all webhooks of an administration + value: + - id: '492273043820774902' + administration_id: 123 + url: http://example.com/create_webhook + enabled_events: [] + last_http_status: null + last_http_body: null + token: cFTCEuZvCinwkRFQnH7uYPin + deactivated_at: null + operationId: get_administration_id_webhooks + post: + summary: Create a webhook + description: |- + Creates a new webhook. The provided URL should respond with a 200 HTTP status. After + creation, the URL will receive notifications when events on documents in the + administration occur. It is also possible to subscribe to certain events by adding an array + with events you would like to receive notifications from. For a full list of available events + and event groups, see the [webhook events documentation](https://developer.moneybird.com/webhooks/events). + +

+ + We strongly recommend that you use a secure HTTPS endpoint for receiving payload from Moneybird.
+ If you use unencrypted HTTP, anyone on the network may be able to listen in on sensitive information like contacts and invoices. +

+ + ### Required scope(s) + `settings` + tags: + - Webhooks + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + requestBody: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + url: + type: string + description: The HTTPS endpoint URL that will receive webhook notifications. Must respond with HTTP 200 on creation. + enabled_events: + type: array + description: List of events to subscribe to. See [webhook events](https://developer.moneybird.com/webhooks/events) for all available events and event groups. + items: + type: + - string + required: + - url + examples: + CreatesAWebhookThatIsSubscribedToEnabledEvents: + summary: Creates a webhook that is subscribed to enabled events + value: + url: http://www.mocky.io/v2/5185415ba171ea3a00704eed + enabled_events: + - contact_created + CreatesAWebhook: + summary: Creates a webhook + value: + url: http://www.mocky.io/v2/5185415ba171ea3a00704eed + responses: + '201': + description: Webhook created + content: + application/json: + schema: + $ref: '#/components/schemas/webhook_response' + examples: + CreatesAWebhookThatIsSubscribedToEnabledEvents: + summary: Creates a webhook that is subscribed to enabled events + value: + id: '492273043412878796' + administration_id: 123 + url: http://www.mocky.io/v2/5185415ba171ea3a00704eed + enabled_events: + - contact_created + last_http_status: null + last_http_body: null + token: z6MvdMS8bqRgQPPRidi4qA1Z + secret: 0c02ae0494986503486dbe5af66796b8d7c307d5212aa39acd7ae369149fa1fe + deactivated_at: null + CreatesAWebhook: + summary: Creates a webhook + value: + id: '492273043536610776' + administration_id: 123 + url: http://www.mocky.io/v2/5185415ba171ea3a00704eed + enabled_events: [] + last_http_status: null + last_http_body: null + token: nr2yWb5w31qhssD4MBRxBpbN + secret: 6f9743dcfc2e46b743079f6495b9b307a8d3c3ae2757a97bc23ae78d82b5ae9c + deactivated_at: null + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + ReturnsAnErrorWhenEventsIsProvided: + summary: Returns an error when events is provided + value: + error: '''events'' has been removed from webhooks, use ''enabled_events''' + symbolic: + events: removed + ReturnsAnErrorWhenFieldsAreNotProvided: + summary: Returns an error when fields are not provided + value: + error: Url is required + symbolic: + url: required + operationId: post_administration_id_webhooks + /{administration_id}/workflows/{id}{format}: + get: + summary: Get a workflow by id + description: |- + Returns all information about a workflow. + + ### Required scope(s) + `settings` + tags: + - Workflows + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - name: id + in: path + required: true + schema: + $ref: '#/components/schemas/identifier' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A workflow + content: + application/json: + schema: + $ref: '#/components/schemas/workflow_response' + examples: + ReturnsAWorkflowWithSteps: + summary: Returns a workflow with steps + value: + id: '492272802756297871' + administration_id: 123 + type: InvoiceWorkflow + name: Standaard + default: true + currency: EUR + language: nl + active: true + prices_are_incl_tax: false + payment_methods: [] + collection_method: null + number_of_collections: 0 + show_qr_code: true + created_at: '2026-07-10T12:52:30.370Z' + updated_at: '2026-07-10T12:52:30.370Z' + steps: + - id: '492272802764686480' + administration_id: 123 + step_order: 0 + due_interval: 14 + reminder_delay: 0 + reminder_text: null + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.381Z' + updated_at: '2026-07-10T12:52:30.381Z' + - id: '492272802768880785' + administration_id: 123 + step_order: 1 + due_interval: 10 + reminder_delay: 0 + reminder_text: |- + Geachte {recipient.name}, + + Uit onze administratie blijkt dat u de onderstaande facturen nog niet voldaan heeft. We willen u erop wijzen dat de betaaltermijn van deze facturen verstreken is en verzoeken u vriendelijk doch dringend om de betaling zo spoedig mogelijk te voldoen. + + {reminders_table} + + Mochten de betalingen en deze herinnering elkaar kruisen, dan kunt u deze herinnering als niet verzonden beschouwen. + Via deze link kunt u naar het overzicht van uw {recipient.show_open_invoices_online_url}. + + Met vriendelijke groet, + + {company.company_name} + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.386Z' + updated_at: '2026-07-10T12:52:30.386Z' + - id: '492272802775172242' + administration_id: 123 + step_order: 2 + due_interval: 5 + reminder_delay: 0 + reminder_text: |- + Geachte {recipient.name}, + + Ondanks een eerdere herinnering blijkt uit onze administratie dat u de onderstaande facturen nog niet voldaan heeft. We willen u er op wijzen dat de betaaltermijn van deze facturen verstreken is en verzoeken u vriendelijk doch dringend om de betaling zo spoedig mogelijk te voldoen. + + {reminders_table} + + Mochten de betalingen en deze herinnering elkaar kruisen, dan kunt u deze herinnering als niet verzonden beschouwen. Wanneer betaling uitblijft, zullen wij de vordering uit handen moeten geven aan een incassobureau en de wettelijke incassokosten in rekening brengen. + Via deze link kunt u naar het overzicht van uw {recipient.show_open_invoices_online_url}. + + Met vriendelijke groet, + + {company.company_name} + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.388Z' + updated_at: '2026-07-10T12:52:30.388Z' + - id: '492272802779366547' + administration_id: 123 + step_order: 3 + due_interval: 5 + reminder_delay: 0 + reminder_text: |- + Geachte {recipient.name}, + + Ondanks eerdere herinneringen blijkt uit onze administratie dat u de onderstaande facturen nog niet voldaan heeft. Dit is de derde herinnering voor het voldoen van de vordering, voordat de vordering uit handen gegeven zal worden aan een incassobureau. + + {reminders_table} + + Wij verzoeken u om de betalingen binnen 5 dagen te voldoen. Wanneer betaling uitblijft, zullen wij de vordering uit handen geven aan een incassobureau en brengen we de wettelijke incassokosten in rekening. + Via deze link kunt u naar het overzicht van uw {recipient.show_open_invoices_online_url}. + + Met vriendelijke groet, + + {company.company_name} + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.396Z' + updated_at: '2026-07-10T12:52:30.396Z' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + examples: + Returns404WhenWorkflowDoesNotExist: + summary: Returns 404 when workflow does not exist + value: + error: 'Record not found for model name: Workflow' + operationId: get_administration_id_workflows_id + /{administration_id}/workflows{format}: + get: + summary: Retrieve available workflows + description: |- + Returns a list of all the workflows of an administration. + + ### Required scope(s) + `settings` + tags: + - Workflows + security: + - bearerAuth: + - settings + parameters: + - $ref: '#/components/parameters/administration_id' + - $ref: '#/components/parameters/format' + responses: + '200': + description: A list of workflows + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/workflow_response' + examples: + ReturnsAllWorkflowsOfAnAdministration: + summary: Returns all workflows of an administration + value: + - id: '492272802992227477' + administration_id: 123 + type: EstimateWorkflow + name: Standaard + default: true + currency: EUR + language: nl + active: true + prices_are_incl_tax: false + payment_methods: [] + collection_method: null + number_of_collections: 0 + show_qr_code: true + created_at: '2026-07-10T12:52:30.596Z' + updated_at: '2026-07-10T12:52:30.596Z' + steps: + - id: '492272802995373206' + administration_id: 123 + step_order: 0 + due_interval: 14 + reminder_delay: 0 + reminder_text: null + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.603Z' + updated_at: '2026-07-10T12:52:30.603Z' + - id: '492272802756297871' + administration_id: 123 + type: InvoiceWorkflow + name: Standaard + default: true + currency: EUR + language: nl + active: true + prices_are_incl_tax: false + payment_methods: [] + collection_method: null + number_of_collections: 0 + show_qr_code: true + created_at: '2026-07-10T12:52:30.370Z' + updated_at: '2026-07-10T12:52:30.370Z' + steps: + - id: '492272802764686480' + administration_id: 123 + step_order: 0 + due_interval: 14 + reminder_delay: 0 + reminder_text: null + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.381Z' + updated_at: '2026-07-10T12:52:30.381Z' + - id: '492272802768880785' + administration_id: 123 + step_order: 1 + due_interval: 10 + reminder_delay: 0 + reminder_text: |- + Geachte {recipient.name}, + + Uit onze administratie blijkt dat u de onderstaande facturen nog niet voldaan heeft. We willen u erop wijzen dat de betaaltermijn van deze facturen verstreken is en verzoeken u vriendelijk doch dringend om de betaling zo spoedig mogelijk te voldoen. + + {reminders_table} + + Mochten de betalingen en deze herinnering elkaar kruisen, dan kunt u deze herinnering als niet verzonden beschouwen. + Via deze link kunt u naar het overzicht van uw {recipient.show_open_invoices_online_url}. + + Met vriendelijke groet, + + {company.company_name} + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.386Z' + updated_at: '2026-07-10T12:52:30.386Z' + - id: '492272802775172242' + administration_id: 123 + step_order: 2 + due_interval: 5 + reminder_delay: 0 + reminder_text: |- + Geachte {recipient.name}, + + Ondanks een eerdere herinnering blijkt uit onze administratie dat u de onderstaande facturen nog niet voldaan heeft. We willen u er op wijzen dat de betaaltermijn van deze facturen verstreken is en verzoeken u vriendelijk doch dringend om de betaling zo spoedig mogelijk te voldoen. + + {reminders_table} + + Mochten de betalingen en deze herinnering elkaar kruisen, dan kunt u deze herinnering als niet verzonden beschouwen. Wanneer betaling uitblijft, zullen wij de vordering uit handen moeten geven aan een incassobureau en de wettelijke incassokosten in rekening brengen. + Via deze link kunt u naar het overzicht van uw {recipient.show_open_invoices_online_url}. + + Met vriendelijke groet, + + {company.company_name} + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.388Z' + updated_at: '2026-07-10T12:52:30.388Z' + - id: '492272802779366547' + administration_id: 123 + step_order: 3 + due_interval: 5 + reminder_delay: 0 + reminder_text: |- + Geachte {recipient.name}, + + Ondanks eerdere herinneringen blijkt uit onze administratie dat u de onderstaande facturen nog niet voldaan heeft. Dit is de derde herinnering voor het voldoen van de vordering, voordat de vordering uit handen gegeven zal worden aan een incassobureau. + + {reminders_table} + + Wij verzoeken u om de betalingen binnen 5 dagen te voldoen. Wanneer betaling uitblijft, zullen wij de vordering uit handen geven aan een incassobureau en brengen we de wettelijke incassokosten in rekening. + Via deze link kunt u naar het overzicht van uw {recipient.show_open_invoices_online_url}. + + Met vriendelijke groet, + + {company.company_name} + reminder_auto_send: false + action: null + created_at: '2026-07-10T12:52:30.396Z' + updated_at: '2026-07-10T12:52:30.396Z' + operationId: get_administration_id_workflows +components: + headers: + link: + description: Pagination links (next, prev) + schema: + type: string + x-total-count: + description: Total number of entries in the collection + schema: + type: integer + parameters: + administration_id: + in: path + name: administration_id + required: true + schema: + $ref: '#/components/schemas/administration_id' + description: The unique identifier of the administration + format: + in: path + name: format + required: true + schema: + type: string + pattern: ^(.(json|xml))?$ + default: .json + description: The format in which the response is given, can be empty to use the default format + page: + name: page + in: query + required: false + schema: + type: + - integer + - string + per_page: + name: per_page + in: query + required: false + schema: + type: + - integer + - string + pattern: ^\d+$ + minimum: 1 + maximum: 100 + period: + name: period + in: query + required: false + description: | + The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). + + **Date range formats:** + - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) + - `YYYYMM..YYYYMM` (e.g., `202501..202501`) + - `YYYYMM` (e.g., `202501`) + + **Preset options:** + - `this_month` - Current month (default if not specified) + - `prev_month` - Previous month + - `next_month` - Next month + - `this_quarter` - Current quarter + - `prev_quarter` - Previous quarter + - `next_quarter` - Next quarter + - `this_year` - Current year + - `prev_year` - Previous year + - `next_year` - Next year + + **Period limits:** + - Most endpoints: Maximum 1 month + - Profit loss & balance sheet: Maximum 12 months + schema: + type: string + pattern: ^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$ + example: 20250101..20250131 + default: this_month + period_until: + name: period_until + in: query + required: false + description: | + A period until which a report should be generated. + + **Date range formats:** + - `YYYYMM` (e.g., `202501`) + + **Preset options:** + - `this_month` - Current month (default if not specified) + - `prev_month` - Previous month + - `this_quarter` - Current quarter + - `prev_quarter` - Previous quarter + - `this_year` - Current year + - `prev_year` - Previous year + schema: + type: string + pattern: ^\d{6,8}|this_month|prev_month|this_quarter|prev_quarter|this_year|prev_year$ + example: '202501' + default: this_month + requestBodies: + payment_request: + required: true + content: + application/*: + schema: + unevaluatedProperties: false + type: object + properties: + payment: + type: object + unevaluatedProperties: false + properties: + payment_date: + type: string + description: The date on which the payment was made. + price: + $ref: '#/components/schemas/number' + description: The amount paid in the document's currency. Both a decimal and a string '10,95' are accepted. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + price_base: + $ref: '#/components/schemas/number' + description: Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Should be a number -1,000,000,000 <= *n* <= 1,000,000,000. + financial_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. + financial_mutation_id: + $ref: '#/components/schemas/identifier' + description: The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. + transaction_identifier: + type: string + description: An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. + manual_payment_action: + type: string + description: Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. + invoice_id: + $ref: '#/components/schemas/identifier' + description: The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). + required: + - payment_date + - price + required: [] + responses: + 200_synchronization_response: + description: IDs and versions of records + content: + application/json: + schema: + type: array + items: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + version: + type: + - integer + - string + 204_no_content: + description: No content + 302_found: + description: Found + content: + text/plain: + schema: + type: string + 400_bad_request: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + 401_unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + 402_payment_required: + description: Payment required + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + 403_forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + 404_not_found: + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/symbolic_error' + 422_unprocessable_entity: + description: Unprocessable entity + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/symbolic_error' + - $ref: '#/components/schemas/non_symbolic_error' + 429_too_many_requests: + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + type: string + example: Retry later + headers: + RateLimit-Limit: + description: The rate limit ceiling for that given request + schema: + type: integer + example: 150 + RateLimit-Remaining: + description: The number of requests left for the time window + schema: + type: integer + example: 149 + RateLimit-Reset: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + Retry-After: + description: The time at which the current rate limit window resets in UTC epoch seconds + schema: + type: integer + example: 1609459200 + 4XX_open_error: + description: Error code + content: + application/json: + schema: + type: integer + status_code: + description: Status code + content: + application/json: + schema: + type: integer + schemas: + administration_id: + allOf: + - $ref: '#/components/schemas/identifier' + description: A unique record identifier of an administration + example: '123' + administration_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/administration_id' + name: + type: string + example: Moneybird + language: + type: string + enum: + - nl + - nl-be + - en + example: nl + description: The ISO 639-1 language code used in the administration + currency: + type: string + description: The ISO 4217 currency code + example: EUR + country: + type: string + description: The ISO 3166-1 alpha-2 code the administration country + example: NL + time_zone: + type: string + description: The time zone of the administration + example: Europe/Amsterdam + access: + type: string + enum: + - accountant_company + - user + description: The type of acess the user has to this administration + example: user + suspended: + type: boolean + period_locked_until: + type: + - string + - 'null' + format: date + period_start_date: + type: string + format: date + description: Start of the year in which the administration recorded its first bookkeeping data, based on journal entries. + example: '2024-01-01' + aging_report_item: + type: object + description: Aging report data item + properties: + contact_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: string + aging_buckets: + type: array + items: + type: object + properties: + name: + type: string + description: The aging bucket name, e.g. '< 30 days', '30-60 days', '60+ days' + amount: + type: string + asset_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier_nullable' + ledger_account_id: + $ref: '#/components/schemas/identifier_nullable' + name: + type: string + purchase_date: + type: string + format: date + purchase_value: + $ref: '#/components/schemas/number' + calculated_purchase_value: + $ref: '#/components/schemas/number' + description: Purchase value reduced by any reinvestment reserve purchase applied to the asset. + current_value: + $ref: '#/components/schemas/number' + value_change_plan: + type: + - object + - 'null' + unevaluatedProperties: false + properties: + lifespan_in_years: + type: number + residual_value: + $ref: '#/components/schemas/number' + active: + type: boolean + monthly_depreciation: + $ref: '#/components/schemas/number' + disposal: + oneOf: + - type: 'null' + - $ref: '#/components/schemas/disposal_response' + value_changes: + type: array + items: + $ref: '#/components/schemas/value_change_response' + sources: + type: array + items: + $ref: '#/components/schemas/source_response' + reinvestment_reserve_purchase: + oneOf: + - type: 'null' + - $ref: '#/components/schemas/reinvestment_reserve_purchase_response' + attachment_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + attachable_id: + $ref: '#/components/schemas/identifier' + attachable_type: + type: string + enum: + - SalesInvoice + - RecurringSalesInvoice + - Document + - FinancialStatement + - Workflow + - Estimate + - ExternalSalesInvoice + filename: + type: string + content_type: + type: string + size: + type: integer + rotation: + type: + - integer + - 'null' + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + balance_sheet_ledger_account: + type: array + description: A list of ledger accounts with their value and child accounts + items: + type: object + properties: + ledger_account_id: + type: string + value: + type: string + children: + type: array + items: + type: object + properties: + ledger_account_id: + type: string + value: + type: string + base_contact_response: + type: object + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + company_name: {} + firstname: + type: + - string + - 'null' + lastname: + type: + - string + - 'null' + address1: + type: + - string + - 'null' + address2: + type: + - string + - 'null' + zipcode: + type: + - string + - 'null' + city: + type: + - string + - 'null' + country: + type: string + phone: + type: + - string + - 'null' + delivery_method: + type: + - string + - 'null' + enum: + - Email + - Post + - Manual + - Simplerinvoicing + - Peppol + - null + customer_id: + type: string + description: Will be assigned automatically if empty + tax_number: + type: + - string + - 'null' + chamber_of_commerce: + type: + - string + - 'null' + bank_account: + type: + - string + - 'null' + description: The SEPA IBAN of the contact, can be empty if no SEPA IBAN is set + is_trusted: + type: boolean + default: default + max_transfer_amount: + type: + - number + - 'null' + attention: + type: + - string + - 'null' + email: + type: + - string + - 'null' + email_ubl: + type: boolean + send_invoices_to_attention: + type: + - string + - 'null' + send_invoices_to_email: + type: + - string + - 'null' + send_estimates_to_attention: + type: + - string + - 'null' + send_estimates_to_email: + type: + - string + - 'null' + direct_debit: + type: boolean + sepa_active: + type: + - boolean + - 'null' + sepa_iban: + type: + - string + - 'null' + sepa_iban_account_name: + type: + - string + - 'null' + sepa_bic: + type: + - string + - 'null' + sepa_mandate_id: + type: + - string + - 'null' + sepa_mandate_date: + type: + - string + - 'null' + format: date + sepa_sequence_type: + type: string + enum: + - RCUR + - FRST + - OOFF + - FNAL + credit_card_number: + type: + - string + - 'null' + credit_card_reference: + type: + - string + - 'null' + credit_card_type: + type: + - string + - 'null' + enum: + - mastercard + - visa + - null + tax_number_validated_at: + type: + - string + - 'null' + format: date-time + tax_number_valid: + type: + - boolean + - 'null' + invoice_workflow_id: + $ref: '#/components/schemas/identifier_nullable' + estimate_workflow_id: + $ref: '#/components/schemas/identifier_nullable' + si_identifier: + type: + - string + - 'null' + si_identifier_type: + type: + - string + - 'null' + moneybird_payments_mandate: + type: boolean + description: Whether the contact has a valid Moneybird Payments mandate + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + type: integer + example: 1716801778 + sales_invoices_url: + type: string + format: uri + pattern: ^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$ + example: https://moneybird.com/123/sales_invoices/4f0af91e456aa9c5b11ccfd6572da4f56cc8e45a701690c9279c9e4cec7b68f1/all + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + custom_fields: + type: array + items: + $ref: '#/components/schemas/custom_field_value_response' + contact_people: + type: array + items: + $ref: '#/components/schemas/contact_person_response' + archived: + type: boolean + base_user_response: + type: object + properties: + id: + $ref: '#/components/schemas/identifier' + name: + type: string + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + contact_person_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier_nullable' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + administration_id: + $ref: '#/components/schemas/administration_id' + firstname: + type: + - string + - 'null' + lastname: + type: + - string + - 'null' + phone: + type: + - string + - 'null' + email: + type: + - string + - 'null' + department: + type: + - string + - 'null' + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + version: + type: integer + contact_report_item: + type: object + description: Contact report data item + properties: + contact_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: string + required: + - contact_id + - amount + contact_response: + unevaluatedProperties: false + allOf: + - $ref: '#/components/schemas/base_contact_response' + - type: object + properties: + events: + type: array + items: + $ref: '#/components/schemas/event_response' + creditors_report_item: + type: object + description: Creditors report data item + properties: + contact_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: string + required: + - contact_id + - amount + currency: + type: string + description: ISO 4217 currency code + example: EUR + custom_field_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier_nullable' + administration_id: + oneOf: + - $ref: '#/components/schemas/administration_id' + - type: 'null' + name: + type: string + source: + type: + - string + - 'null' + enum: + - sales_invoice + - estimate + - contact + - identity + - null + custom_field_value_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + name: + type: string + value: + type: string + custom_fields_attributes: + oneOf: + - type: object + additionalProperties: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + description: The ID of the custom field to set a value for. Retrieve available custom fields via the custom fields endpoint. + value: + type: string + description: The value to assign to the custom field. The expected format depends on the custom field's type (e.g. text or dropdown). + required: + - id + - value + - type: array + items: + type: object + properties: + id: + type: + - integer + - string + description: The ID of the custom field to set a value for. Retrieve available custom fields via the custom fields endpoint. + value: + type: string + description: The value to assign to the custom field. The expected format depends on the custom field's type (e.g. text or dropdown). + debtors_report_item: + type: object + description: Debtors report data item + properties: + contact_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: string + required: + - contact_id + - amount + detail_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + tax_rate_id: + $ref: '#/components/schemas/identifier' + ledger_account_id: + $ref: '#/components/schemas/identifier' + project_id: + $ref: '#/components/schemas/identifier_nullable' + product_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: + - string + - 'null' + amount_decimal: + type: + - string + - 'null' + description: + type: string + price: + type: string + pattern: ^-?\d+\.\d{1,2}$ + examples: + - '123.45' + - '-500.0' + - '0.0' + period: + type: + - string + - 'null' + pattern: ^\d{6,8}..\d{6,8}$ + example: 20250501..20250531 + row_order: + type: integer + total_price_excl_tax_with_discount: + $ref: '#/components/schemas/number' + total_price_excl_tax_with_discount_base: + $ref: '#/components/schemas/number' + tax_report_reference: + type: array + items: + type: + - string + - 'null' + mandatory_tax_text: + type: + - string + - 'null' + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + is_optional: + type: boolean + is_selected: + type: boolean + details_attributes: + oneOf: + - type: object + additionalProperties: + type: object + unevaluatedProperties: false + properties: + id: + type: + - integer + - string + description: The ID of an existing detail to update. Required when updating or removing an existing detail; omit when creating a new one. + description: + type: string + description: A free-text description for this detail, e.g. the name of the product or service delivered. + period: + type: string + description: 'String with a date range: `20140101..20141231`, presets are also allowed: `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`. Used to indicate the period the detail applies to. Revenue or expenses are deferred over this period in the profit and loss report.' + price: + $ref: '#/components/schemas/number' + description: The unit price for this detail. Both a decimal and a string '10,95' are accepted. + amount: + type: + - integer + - string + description: The quantity for this detail, e.g. `1`, `5` or `0.5`. Defaults to 1 if not provided. + tax_rate_id: + type: + - integer + - string + description: The ID of the tax rate to apply to this detail. Should be a valid tax rate id. If not provided, the administration's default tax rate is used. + ledger_account_id: + type: + - integer + - string + description: The ID of the ledger account (category) to book this detail to. Should be a valid ledger account id. + project_id: + type: + - integer + - string + description: The ID of the project to associate with this detail. Should be a valid project id. Used to track revenue and expenses per project. + product_id: + type: + - integer + - string + description: The ID of the product to use for this detail. When provided, the product's default price, tax rate, ledger account, description and period are applied as defaults. Explicitly provided values take precedence. Should be a valid product id. + row_order: + type: + - integer + - string + description: The position of this detail in the document, starting at 0. Used to control the display order of details. + is_optional: + type: + - boolean + - string + description: Whether this detail is optional. Optional details are shown on estimates but not included in the total unless selected by the client. Only allowed on estimates. + is_selected: + type: + - boolean + - string + description: Whether this optional detail has been selected by the client. Only relevant when `is_optional` is true. + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this detail from the document. Requires the `id` of the existing detail. + automated_tax_enabled: + type: + - boolean + - string + description: Whether automatic tax calculation is enabled for this detail. When enabled, the tax rate is automatically determined based on the product's type and VAT rate type, combined with the contact's country, tax number and address. Requires a `product_id` with smart tax selection enabled (i.e. `product_type` and `vat_rate_type` configured on the product). + required: [] + - type: array + items: + type: object + properties: + id: + type: + - integer + - string + description: The ID of an existing detail to update. Required when updating or removing an existing detail; omit when creating a new one. + description: + type: string + description: A free-text description for this detail, e.g. the name of the product or service delivered. + period: + type: string + description: 'String with a date range: `20140101..20141231`, presets are also allowed: `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`. Used to indicate the period the detail applies to. Revenue or expenses are deferred over this period in the profit and loss report.' + price: + $ref: '#/components/schemas/number' + description: The unit price for this detail. Both a decimal and a string '10,95' are accepted. + amount: + type: + - integer + - string + description: The quantity for this detail, e.g. `1`, `5` or `0.5`. Defaults to 1 if not provided. + tax_rate_id: + type: + - integer + - string + description: The ID of the tax rate to apply to this detail. Should be a valid tax rate id. If not provided, the administration's default tax rate is used. + ledger_account_id: + type: + - integer + - string + description: The ID of the ledger account (category) to book this detail to. Should be a valid ledger account id. + project_id: + type: + - integer + - string + description: The ID of the project to associate with this detail. Should be a valid project id. Used to track revenue and expenses per project. + product_id: + type: + - integer + - string + description: The ID of the product to use for this detail. When provided, the product's default price, tax rate, ledger account, description and period are applied as defaults. Explicitly provided values take precedence. Should be a valid product id. + row_order: + type: + - integer + - string + description: The position of this detail in the document, starting at 0. Used to control the display order of details. + is_optional: + type: + - boolean + - string + description: Whether this detail is optional. Optional details are shown on estimates but not included in the total unless selected by the client. Only allowed on estimates. + is_selected: + type: + - boolean + - string + description: Whether this optional detail has been selected by the client. Only relevant when `is_optional` is true. + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this detail from the document. Requires the `id` of the existing detail. + automated_tax_enabled: + type: + - boolean + - string + description: Whether automatic tax calculation is enabled for this detail. When enabled, the tax rate is automatically determined based on the product's type and VAT rate type, combined with the contact's country, tax number and address. Requires a `product_id` with smart tax selection enabled (i.e. `product_type` and `vat_rate_type` configured on the product). + disposal_response: + type: object + unevaluatedProperties: false + properties: + date: + type: string + format: date + reason: + type: string + enum: + - out_of_use + - sold + - private_withdrawal + - divested + externally_booked: + type: boolean + asset_id: + $ref: '#/components/schemas/identifier' + reinvestment_reserve_sale: + oneOf: + - type: 'null' + - $ref: '#/components/schemas/reinvestment_reserve_sale_response' + document_style_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + name: + type: string + identity_id: + $ref: '#/components/schemas/identifier' + default: + type: boolean + logo_hash: + type: + - string + - 'null' + logo_container_full_width: + type: + - boolean + - 'null' + default: false + logo_display_width: + type: + - integer + - 'null' + default: 50 + logo_position: + type: string + enum: + - left + - center + - right + background_hash: + type: + - string + - 'null' + paper_size: + type: string + enum: + - A4 + - letter + address_position: + type: string + enum: + - left + - right + font_size: + type: integer + font_family: + type: string + print_on_stationery: + type: + - boolean + - 'null' + default: false + custom_css: + type: + - string + - 'null' + invoice_sender_address: + type: array + items: + type: object + additionalProperties: + type: + - string + - boolean + invoice_metadata_left: + type: array + items: + type: object + additionalProperties: + type: + - string + - boolean + invoice_metadata_right: + type: array + items: + type: object + additionalProperties: + type: + - string + - boolean + estimate_sender_address: + type: array + items: + type: object + additionalProperties: + type: + - string + - boolean + estimate_metadata_left: + type: array + items: + type: object + additionalProperties: + type: + - string + - boolean + estimate_metadata_right: + type: array + items: + type: object + additionalProperties: + type: + - string + - boolean + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + download_response: + type: object + properties: + id: + $ref: '#/components/schemas/identifier' + user_id: + $ref: '#/components/schemas/identifier_nullable' + description: The user who created the download + download_type: + type: string + description: The type of download (e.g., export_contacts, export_sales_invoices, auditfile) + filename: + type: string + content_type: + type: string + failed: + type: boolean + downloaded: + type: boolean + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + estimate_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier' + contact: + oneOf: + - $ref: '#/components/schemas/simple_contact_response' + - type: 'null' + contact_person_id: + $ref: '#/components/schemas/identifier_nullable' + contact_person: + oneOf: + - $ref: '#/components/schemas/contact_person_response' + - type: 'null' + estimate_id: + type: + - string + - 'null' + estimate_sequence_id: + type: + - string + - 'null' + workflow_id: + $ref: '#/components/schemas/identifier' + document_style_id: + $ref: '#/components/schemas/identifier' + identity_id: + $ref: '#/components/schemas/identifier' + draft_id: + type: + - integer + - 'null' + state: + type: string + enum: + - draft + - open + - late + - accepted + - rejected + - billed + - archived + estimate_date: + type: + - string + - 'null' + format: date + due_date: + type: string + format: date + reference: + type: + - string + - 'null' + language: + type: + - string + - 'null' + currency: + type: string + exchange_rate: + $ref: '#/components/schemas/number' + discount: + $ref: '#/components/schemas/number' + original_estimate_id: + $ref: '#/components/schemas/identifier_nullable' + show_tax: + type: boolean + default: true + sign_online: + type: boolean + default: true + sent_at: + type: + - string + - 'null' + format: date + accepted_at: + type: + - string + - 'null' + format: date + rejected_at: + type: + - string + - 'null' + format: date + archived_at: + type: + - string + - 'null' + format: date + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + public_view_code: + type: + - string + - 'null' + pattern: ^\d+$ + public_view_code_expires_at: + type: + - string + - 'null' + format: date-time + version: + type: integer + pre_text: + type: + - string + - 'null' + post_text: + type: + - string + - 'null' + details: + type: array + items: + $ref: '#/components/schemas/detail_response' + prices_are_incl_tax: + type: boolean + default: false + total_price_excl_tax: + $ref: '#/components/schemas/number' + total_price_excl_tax_base: + $ref: '#/components/schemas/number' + total_price_incl_tax: + $ref: '#/components/schemas/number' + total_price_incl_tax_base: + $ref: '#/components/schemas/number' + total_discount: + $ref: '#/components/schemas/number' + url: + type: string + custom_fields: + type: array + items: + $ref: '#/components/schemas/custom_field_value_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + tax_totals: + type: array + items: + $ref: '#/components/schemas/tax_subtotal_response' + event_response: + type: object + unevaluatedProperties: false + properties: + administration_id: + oneOf: + - $ref: '#/components/schemas/administration_id' + - type: 'null' + user_id: + $ref: '#/components/schemas/identifier' + action: + type: string + link_entity_id: + $ref: '#/components/schemas/identifier_nullable' + link_entity_type: + type: + - string + - 'null' + data: + type: object + additionalProperties: true + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + extended_user_response: + unevaluatedProperties: false + allOf: + - $ref: '#/components/schemas/base_user_response' + - type: object + properties: + email: + type: string + email_validated: + type: boolean + language: + type: string + time_zone: + type: string + example: Europe/Amsterdam + user_type: + type: string + enum: + - end_user + - api_user + - system_user + - deleted_end_user + - deleted_api_user + - owner + - accountant + - employee + permissions: + type: array + items: + type: string + enum: + - sales_invoices + - documents + - estimates + - bank + - settings + - ownership + - time_entries + external_sales_invoice_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + contact: + oneOf: + - $ref: '#/components/schemas/simple_contact_response' + - type: 'null' + date: + type: string + format: date + state: + type: string + enum: + - new + - open + - late + - paid + - uncollectible + - pending_payment + due_date: + type: + - string + - 'null' + format: date + reference: + type: + - string + - 'null' + entry_number: + type: integer + origin: + type: + - string + - 'null' + enum: + - upload + - endpoint + - si + - email + - si_local + - si_peppol + - api + - moneybird_bv + - mollie + - null + source: + type: + - string + - 'null' + source_url: + type: + - string + - 'null' + currency: + $ref: '#/components/schemas/currency' + paid_at: + type: + - string + - 'null' + format: date + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + $ref: '#/components/schemas/version' + details: + type: array + items: + $ref: '#/components/schemas/detail_response' + payments: + type: array + items: + $ref: '#/components/schemas/payment_response' + total_paid: + type: string + total_unpaid: + type: string + total_unpaid_base: + type: string + prices_are_incl_tax: + type: boolean + total_price_excl_tax: + type: string + total_price_excl_tax_base: + type: string + total_price_incl_tax: + type: string + total_price_incl_tax_base: + type: string + marked_dubious_on: + type: + - string + - 'null' + format: date + marked_uncollectible_on: + type: + - string + - 'null' + format: date + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + tax_totals: + type: array + items: + $ref: '#/components/schemas/tax_subtotal_response' + financial_account_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + type: + type: string + name: + type: string + identifier: + type: string + currency: + $ref: '#/components/schemas/currency' + provider: + type: + - string + - 'null' + active: + type: boolean + default: true + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + financial_mutation_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + amount: + type: string + code: + type: + - string + - 'null' + date: + type: string + format: date + message: + type: + - string + - 'null' + contra_account_name: + type: + - string + - 'null' + contra_account_number: + type: string + state: + type: string + enum: + - unprocessed + - processed + default: unprocessed + settlement_state: + type: string + enum: + - authorised + - cancelled + - expired + - settled + - pending + - refused + - error + - captured + - failed + - returned + default: settled + amount_open: + type: string + sepa_fields: + type: + - object + - 'null' + batch_reference: + type: + - string + - 'null' + financial_account_id: + $ref: '#/components/schemas/identifier' + currency: + $ref: '#/components/schemas/currency' + original_amount: + type: + - string + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + $ref: '#/components/schemas/version' + financial_statement_id: + $ref: '#/components/schemas/identifier' + processed_at: + type: + - string + - 'null' + format: date-time + account_servicer_transaction_id: + type: + - string + - 'null' + payments: + type: array + items: + $ref: '#/components/schemas/payment_response' + ledger_account_bookings: + type: array + items: + $ref: '#/components/schemas/ledger_account_booking_response' + financial_statement_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + financial_account_id: + $ref: '#/components/schemas/identifier' + reference: + type: string + official_date: + type: + - string + - 'null' + format: date + official_balance: + type: + - string + - 'null' + importer_service: + type: + - string + - 'null' + financial_mutations: + type: array + items: + $ref: '#/components/schemas/financial_mutation_response' + fiscal_allocation_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + ledger_account_id: + $ref: '#/components/schemas/identifier' + private_ledger_account_id: + $ref: '#/components/schemas/identifier' + percentage: + $ref: '#/components/schemas/number' + price: + $ref: '#/components/schemas/number' + price_base: + $ref: '#/components/schemas/number' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + fiscal_allocations_attributes: + oneOf: + - type: object + additionalProperties: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + description: The ID of an existing fiscal allocation to update. Required when updating or removing an existing allocation; omit when creating a new one. + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account (category) this allocation applies to. Must match a ledger account used in the document's details. + private_ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the private ledger account (equity account) to allocate the private portion to. + percentage: + $ref: '#/components/schemas/number' + description: The percentage of expenses for the given ledger account that is allocated to private use. The total percentage across all allocations for the same ledger account on a document must not exceed 100. + minimum: 0 + maximum: 100 + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this fiscal allocation from the document. Requires the `id` of the existing allocation. + required: [] + - type: array + items: + type: object + properties: + id: + $ref: '#/components/schemas/identifier' + description: The ID of an existing fiscal allocation to update. Required when updating or removing an existing allocation; omit when creating a new one. + ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the ledger account (category) this allocation applies to. Must match a ledger account used in the document's details. + private_ledger_account_id: + $ref: '#/components/schemas/identifier' + description: The ID of the private ledger account (equity account) to allocate the private portion to. + percentage: + $ref: '#/components/schemas/number' + description: The percentage of expenses for the given ledger account that is allocated to private use. The total percentage across all allocations for the same ledger account on a document must not exceed 100. + minimum: 0 + maximum: 100 + _destroy: + type: + - boolean + - string + description: Set to `true` to remove this fiscal allocation from the document. Requires the `id` of the existing allocation. + general_document_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + contact: + oneOf: + - $ref: '#/components/schemas/simple_contact_response' + - type: 'null' + reference: + type: + - string + - 'null' + date: + type: string + format: date + due_date: + type: + - string + - 'null' + format: date + entry_number: + type: + - integer + - 'null' + state: + type: string + enum: + - new + - open + - late + - paid + - saved + - pending_payment + exchange_rate: + type: + - string + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + $ref: '#/components/schemas/version' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + general_journal_document_entry_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + ledger_account_id: + $ref: '#/components/schemas/identifier' + project_id: + $ref: '#/components/schemas/identifier_nullable' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + debit: + type: string + credit: + type: string + row_order: + type: + - integer + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + description: + type: + - string + - 'null' + general_journal_document_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + reference: + type: + - string + - 'null' + date: + type: string + format: date + journal_type: + type: + - string + - 'null' + enum: + - fiscal_year_ending + - null + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + $ref: '#/components/schemas/version' + general_journal_document_entries: + type: array + items: + $ref: '#/components/schemas/general_journal_document_entry_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + identifier: + type: + - string + - integer + pattern: ^\d+$ + description: A unique record identifier + example: '458026356994737217' + identifier_nullable: + type: + - string + - integer + - 'null' + pattern: ^\d+$ + description: A unique record identifier + example: '458026356994737217' + identity_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + company_name: + type: + - string + - 'null' + city: + type: + - string + - 'null' + country: + type: + - string + - 'null' + zipcode: + type: + - string + - 'null' + address1: + type: + - string + - 'null' + address2: + type: + - string + - 'null' + email: + type: + - string + - 'null' + phone: + type: + - string + - 'null' + bank_account_name: + type: + - string + - 'null' + bank_account_number: + type: + - string + - 'null' + bank_account_bic: + type: + - string + - 'null' + custom_fields: + type: array + items: + $ref: '#/components/schemas/custom_field_value_response' + updated_at: + $ref: '#/components/schemas/timestamp' + created_at: + $ref: '#/components/schemas/timestamp' + chamber_of_commerce: + type: + - string + - 'null' + tax_number: + type: + - string + - 'null' + ledger_account_booking_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + financial_mutation_id: + $ref: '#/components/schemas/identifier' + ledger_account_id: + $ref: '#/components/schemas/identifier' + project_id: + $ref: '#/components/schemas/identifier_nullable' + description: + type: + - string + - 'null' + price: + type: string + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + ledger_account_data: + type: object + description: Data grouped by ledger account. Contains an array of ledger account entries with ledger_account_id and value. + required: + - ledger_accounts + properties: + ledger_accounts: + type: array + description: Array of ledger account entries with ledger_account_id and value. + items: + type: object + required: + - ledger_account_id + - value + properties: + ledger_account_id: + type: string + description: The ID of the ledger account + value: + type: string + description: The value for this ledger account + ledger_account_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + name: + type: string + account_type: + type: string + enum: + - non_current_assets + - current_assets + - equity + - non_current_liabilities + - current_liabilities + - revenue + - direct_costs + - expenses + - other_income_expenses + - other + - temporary + - provisions + account_id: + type: + - string + - 'null' + parent_id: + $ref: '#/components/schemas/identifier_nullable' + active: + type: boolean + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + allowed_document_types: + type: array + items: + type: string + enum: + - sales_invoice + - purchase_invoice + - general_journal_document + - financial_mutation + - payment + taxonomy_item: + $ref: '#/components/schemas/taxonomy_item_response' + financial_account_id: + $ref: '#/components/schemas/identifier_nullable' + minimal_contact_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + firstname: + type: + - string + - 'null' + lastname: + type: + - string + - 'null' + company_name: + type: + - string + - 'null' + minimal_time_entry_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + project_id: + $ref: '#/components/schemas/identifier_nullable' + user_id: + $ref: '#/components/schemas/identifier' + started_at: + $ref: '#/components/schemas/timestamp' + ended_at: + $ref: '#/components/schemas/timestamp' + description: + type: + - string + - 'null' + paused_duration: + type: string + billable: + type: boolean + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + non_symbolic_error: + type: object + properties: + error: + type: object + additionalProperties: + type: array + items: + type: + - string + - object + note_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + entity_id: + $ref: '#/components/schemas/identifier_nullable' + entity_type: + type: string + user_id: + $ref: '#/components/schemas/identifier' + assignee_id: + $ref: '#/components/schemas/identifier_nullable' + todo: + type: + - boolean + - string + - 'null' + default: false + note: + type: + - string + - 'null' + completed_at: + type: + - string + - 'null' + format: date-time + completed_by_id: + $ref: '#/components/schemas/identifier_nullable' + todo_type: + type: + - string + - 'null' + enum: + - sales_invoice_due + - purchase_invoice_due + - general_document_reminder + - general_document_due + - new_document_awaiting_processing + - new_financial_mutation_awaiting_processing + - financial_mutations_not_updated + - sales_invoice_payment_not_linked_to_financial_mutation + - document_payment_not_linked_to_financial_mutation + - sales_invoice_awaiting_payment_batch + - export_sales_invoices_ready + - export_documents_ready + - export_contacts_ready + - import_contacts_ready + - recurring_sales_invoice_auto_send_failed + - sales_invoice_scheduled_sending_failed + - sales_invoice_reminder_sending_failed + - sales_invoice_becoming_due + - sales_invoice_collecting_failed + - estimate_due + - export_estimates_ready + - sales_invoice_email_delivery_failed + - sales_invoice_email_marked_as_spam + - estimate_email_delivery_failed + - estimate_email_marked_as_spam + - purchase_invoice_invalid_ubl + - sales_invoice_unprintable + - estimate_unprintable + - auditfile_ready + - import_financial_statement_finished + - recurring_sales_invoice_auto_send_skipped_import_wizard + - ledger_account_report_export_ready + - recurring_sales_invoice_failed_deleted_contact + - recurring_sales_invoice_create_invoice_failed + - sales_invoice_simplerinvoicing_delivery_failed_unroutable + - purchase_invoice_received_simplerinvoicing + - sales_invoice_simplerinvoicing_delivery_error + - purchase_transaction_expired + - sales_invoice_si_delivery_failed_contact_unreachable + - sales_invoice_si_delivery_failed_deactivated + - sales_invoice_si_delivery_failed_identity_unverified + - sales_invoice_si_delivery_failed_length_exceeded + - recurring_document_stopped_by_contact_delete + - sales_invoice_email_previously_bounced + - estimate_email_previously_bounced + - email_domain_invalidated + - external_sales_invoice_invalid_ubl + - sales_invoice_email_invalid_address + - estimate_email_invalid_address + - gateway_connection_terminated + - sales_invoice_email_payload_too_large + - estimate_email_payload_too_large + - ponto_organization_not_activated + - ponto_financial_institution_deprecated + - contact_email_delivery_failed + - contact_email_marked_as_spam + - contact_email_previously_bounced + - contact_email_invalid_address + - contact_email_payload_too_large + - sales_invoice_scheduling_failed_due_to_payment_information + - sales_invoice_collecting_failed_missing_subscription + - sales_invoice_si_delivery_failed_ubl_validation_failed + - sales_invoice_email_sender_limit + - estimate_email_sender_limit + - contact_email_sender_limit + - sales_invoice_email_invalid_attachment + - estimate_email_invalid_attachment + - contact_email_invalid_attachment + - sales_invoice_collecting_failed_monthly_limit_exceeded + - adyen_verification_error + - contact_email_not_present + - financial_mutation_failed + - sales_invoice_si_delivery_failed_invalid_sender + - sales_invoice_tax_number_invalid + - payment_transaction_no_positive_payment + - financial_mutation_payment_locked + - null + data: + type: + - object + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + number: + oneOf: + - type: string + pattern: ^-?[0-9]+[,\.]?[0-9]*$ + example: '1.0' + - type: number + example: 1 + - type: 'null' + payment_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + invoice_type: + type: string + enum: + - SalesInvoice + - Document + - ExternalSalesInvoice + - VatDocument + invoice_id: + $ref: '#/components/schemas/identifier' + financial_account_id: + $ref: '#/components/schemas/identifier_nullable' + user_id: + $ref: '#/components/schemas/identifier' + payment_transaction_id: + $ref: '#/components/schemas/identifier_nullable' + transaction_identifier: + type: + - string + - 'null' + price: + $ref: '#/components/schemas/number' + price_base: + $ref: '#/components/schemas/number' + payment_date: + type: string + format: date + credit_invoice_id: + $ref: '#/components/schemas/identifier_nullable' + financial_mutation_id: + $ref: '#/components/schemas/identifier_nullable' + ledger_account_id: + $ref: '#/components/schemas/identifier_nullable' + linked_payment_id: + $ref: '#/components/schemas/identifier_nullable' + manual_payment_action: + type: + - string + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + product_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + description: + type: + - string + - 'null' + title: + type: + - string + - 'null' + identifier: + type: + - string + - 'null' + price: + type: string + currency: + type: string + frequency: + type: + - integer + - 'null' + frequency_type: + type: + - string + - 'null' + enum: + - day + - week + - month + - quarter + - year + - null + tax_rate_id: + $ref: '#/components/schemas/identifier_nullable' + ledger_account_id: + $ref: '#/components/schemas/identifier' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + project_report_item: + type: object + description: Project report data item + properties: + project_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: string + required: + - project_id + - amount + project_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + name: + type: string + state: + type: string + enum: + - active + - archived + budget: + type: + - integer + - 'null' + purchase_invoice_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + contact: + oneOf: + - $ref: '#/components/schemas/simple_contact_response' + - type: 'null' + reference: + type: + - string + - 'null' + date: + type: string + format: date + due_date: + type: + - string + - 'null' + format: date + entry_number: + type: + - integer + - 'null' + state: + type: string + enum: + - new + - open + - late + - paid + - saved + - pending_payment + currency: + $ref: '#/components/schemas/currency' + exchange_rate: + type: + - string + - 'null' + revenue_invoice: + type: + - boolean + - 'null' + prices_are_incl_tax: + type: + - boolean + - 'null' + origin: + type: + - string + - 'null' + enum: + - upload + - endpoint + - si + - email + - si_local + - si_peppol + - api + - moneybird_bv + - mollie + - null + paid_at: + type: + - string + - 'null' + format: date + tax_number: + type: + - string + - 'null' + total_price_excl_tax: + type: + - string + - 'null' + total_price_excl_tax_base: + type: + - string + - 'null' + total_price_incl_tax: + type: + - string + - 'null' + total_price_incl_tax_base: + type: + - string + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + $ref: '#/components/schemas/version' + details: + type: array + items: + $ref: '#/components/schemas/detail_response' + fiscal_allocations: + type: array + items: + $ref: '#/components/schemas/fiscal_allocation_response' + payments: + type: array + items: + $ref: '#/components/schemas/payment_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + purchase_transaction_batch_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + financial_account_id: + $ref: '#/components/schemas/identifier' + state: + type: string + enum: + - exported + - cancelled + - open + identifier: + type: string + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + purchase_transaction_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + financial_account_id: + $ref: '#/components/schemas/identifier' + payment_instrument_id: + $ref: '#/components/schemas/identifier_nullable' + state: + type: string + enum: + - open + - cancelled + - paid + - pending_payment + - error + - awaiting_authorization + - preparing + sepa_iban: + type: string + sepa_iban_account_name: + type: string + sepa_bic: + type: string + source_sepa_iban: + type: + - string + - 'null' + source_sepa_iban_account_name: + type: + - string + - 'null' + date: + type: + - string + - 'null' + format: date + description: + type: string + end_to_end_id: + type: string + contact: + $ref: '#/components/schemas/simple_contact_response' + amount: + type: string + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + payable_type: + type: + - string + - 'null' + payable_id: + $ref: '#/components/schemas/identifier_nullable' + payment_method: + type: + - string + - 'null' + receipt_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + contact: + oneOf: + - $ref: '#/components/schemas/simple_contact_response' + - type: 'null' + reference: + type: + - string + - 'null' + date: + type: string + format: date + due_date: + type: + - string + - 'null' + format: date + entry_number: + type: + - integer + - 'null' + state: + type: string + enum: + - new + - open + - late + - paid + - saved + - pending_payment + currency: + type: + - string + - 'null' + exchange_rate: + $ref: '#/components/schemas/number' + revenue_invoice: + type: + - boolean + - 'null' + prices_are_incl_tax: + type: + - boolean + - 'null' + origin: + type: + - string + - 'null' + enum: + - upload + - endpoint + - si + - email + - si_local + - si_peppol + - api + - moneybird_bv + - mollie + - null + paid_at: + type: + - string + - 'null' + format: date + tax_number: + type: + - string + - 'null' + total_price_excl_tax: + type: + - string + - 'null' + total_price_excl_tax_base: + type: + - string + - 'null' + total_price_incl_tax: + type: + - string + - 'null' + total_price_incl_tax_base: + type: + - string + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + $ref: '#/components/schemas/version' + details: + type: array + items: + $ref: '#/components/schemas/detail_response' + fiscal_allocations: + type: array + items: + $ref: '#/components/schemas/fiscal_allocation_response' + payments: + type: array + items: + $ref: '#/components/schemas/payment_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + recurring_contract_response: + type: object + unevaluatedProperties: false + properties: + type: + type: + - string + - 'null' + sepa_mandate: + type: boolean + bank: + type: + - string + - 'null' + iban: + type: + - string + - 'null' + bic: + type: + - string + - 'null' + iban_account_name: + type: + - string + - 'null' + card_expiry_month: + type: + - string + - 'null' + card_expiry_year: + type: + - string + - 'null' + card_final_digits: + type: + - string + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + recurring_sales_invoice_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier' + contact: + $ref: '#/components/schemas/simple_contact_response' + contact_person_id: + $ref: '#/components/schemas/identifier_nullable' + contact_person: + oneOf: + - $ref: '#/components/schemas/contact_person_response' + - type: 'null' + workflow_id: + $ref: '#/components/schemas/identifier' + start_date: + type: string + format: date + invoice_date: + type: string + format: date + last_date: + type: + - string + - 'null' + format: date + active: + type: + - boolean + - 'null' + payment_conditions: + type: + - string + - 'null' + reference: + type: + - string + - 'null' + language: + type: string + currency: + type: string + discount: + type: + - string + - 'null' + first_due_interval: + type: integer + auto_send: + type: + - boolean + - 'null' + sending_scheduled_at: + type: + - string + - 'null' + format: date-time + sending_scheduled_user_id: + $ref: '#/components/schemas/identifier_nullable' + frequency_type: + type: string + enum: + - day + - week + - month + - quarter + - year + frequency: + type: integer + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + version: + $ref: '#/components/schemas/version' + prices_are_incl_tax: + type: boolean + total_price_excl_tax: + type: string + total_price_excl_tax_base: + type: string + total_price_incl_tax: + type: string + total_price_incl_tax_base: + type: string + details: + type: array + items: + $ref: '#/components/schemas/detail_response' + custom_fields: + type: array + items: + $ref: '#/components/schemas/custom_field_value_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + subscription: + oneOf: + - $ref: '#/components/schemas/subscription_response' + - type: 'null' + reinvestment_reserve_purchase_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + amount: + $ref: '#/components/schemas/number' + date: + type: string + format: date + asset_id: + $ref: '#/components/schemas/identifier' + reinvestment_reserve_sale_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + amount: + $ref: '#/components/schemas/number' + date: + type: string + format: date + disposal_id: + $ref: '#/components/schemas/identifier' + sales_invoice_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier' + contact: + $ref: '#/components/schemas/simple_contact_response' + contact_person_id: + $ref: '#/components/schemas/identifier_nullable' + contact_person: + oneOf: + - $ref: '#/components/schemas/contact_person_response' + - type: 'null' + invoice_id: + type: + - string + - 'null' + recurring_sales_invoice_id: + $ref: '#/components/schemas/identifier_nullable' + subscription_id: + $ref: '#/components/schemas/identifier_nullable' + workflow_id: + $ref: '#/components/schemas/identifier' + document_style_id: + $ref: '#/components/schemas/identifier' + identity_id: + $ref: '#/components/schemas/identifier' + draft_id: + type: + - integer + - 'null' + state: + type: string + enum: + - draft + - scheduled + - open + - pending_payment + - reminded + - late + - paid + - uncollectible + invoice_date: + type: + - string + - 'null' + format: date + due_date: + type: string + format: date + payment_conditions: + type: + - string + - 'null' + payment_reference: + type: + - string + - 'null' + short_payment_reference: + type: + - string + - 'null' + reference: + type: + - string + - 'null' + language: + type: + - string + - 'null' + currency: + type: string + discount: + type: + - string + - 'null' + original_sales_invoice_id: + $ref: '#/components/schemas/identifier_nullable' + paused: + type: boolean + paid_at: + type: + - string + - 'null' + format: date + sent_at: + type: + - string + - 'null' + format: date + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + public_view_code: + type: + - string + - 'null' + public_view_code_expires_at: + type: + - string + - 'null' + format: date-time + version: + $ref: '#/components/schemas/version' + details: + type: array + items: + $ref: '#/components/schemas/detail_response' + payments: + type: array + items: + $ref: '#/components/schemas/payment_response' + total_paid: + type: string + total_unpaid: + type: string + total_unpaid_base: + type: string + prices_are_incl_tax: + type: boolean + total_price_excl_tax: + type: string + total_price_excl_tax_base: + type: string + total_price_incl_tax: + type: string + total_price_incl_tax_base: + type: string + total_discount: + type: string + marked_dubious_on: + type: + - string + - 'null' + format: date + marked_uncollectible_on: + type: + - string + - 'null' + format: date + reminder_count: + type: + - integer + - 'null' + next_reminder: + type: + - string + - 'null' + format: date + original_estimate_id: + $ref: '#/components/schemas/identifier_nullable' + url: + type: string + payment_url: + type: string + custom_fields: + type: array + items: + $ref: '#/components/schemas/custom_field_value_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + tax_totals: + type: array + items: + $ref: '#/components/schemas/tax_subtotal_response' + time_entries: + type: array + items: + $ref: '#/components/schemas/minimal_time_entry_response' + simple_contact_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + company_name: + type: + - string + - 'null' + firstname: + type: + - string + - 'null' + lastname: + type: + - string + - 'null' + address1: + type: + - string + - 'null' + address2: + type: + - string + - 'null' + zipcode: + type: + - string + - 'null' + city: + type: + - string + - 'null' + country: + type: string + phone: + type: + - string + - 'null' + delivery_method: + type: + - string + - 'null' + enum: + - Email + - Post + - Manual + - Simplerinvoicing + - Peppol + - null + customer_id: + type: string + tax_number: + type: + - string + - 'null' + chamber_of_commerce: + type: + - string + - 'null' + bank_account: + type: + - string + - 'null' + is_trusted: + type: boolean + max_transfer_amount: + type: + - string + - 'null' + attention: + type: + - string + - 'null' + email: + type: + - string + - 'null' + email_ubl: + type: boolean + send_invoices_to_attention: + type: + - string + - 'null' + send_invoices_to_email: + type: + - string + - 'null' + send_estimates_to_attention: + type: + - string + - 'null' + send_estimates_to_email: + type: + - string + - 'null' + direct_debit: + type: boolean + sepa_active: + type: + - boolean + - 'null' + sepa_iban: + type: + - string + - 'null' + sepa_iban_account_name: + type: + - string + - 'null' + sepa_bic: + type: + - string + - 'null' + sepa_mandate_id: + type: + - string + - 'null' + sepa_mandate_date: + type: + - string + - 'null' + format: date + sepa_sequence_type: + type: string + enum: + - RCUR + - FRST + - OOFF + - FNAL + credit_card_number: + type: + - string + - 'null' + credit_card_reference: + type: + - string + - 'null' + credit_card_type: + type: + - string + - 'null' + enum: + - mastercard + - visa + - null + tax_number_validated_at: + type: + - string + - 'null' + format: date-time + tax_number_valid: + type: + - boolean + - 'null' + invoice_workflow_id: + $ref: '#/components/schemas/identifier_nullable' + estimate_workflow_id: + $ref: '#/components/schemas/identifier_nullable' + si_identifier: + type: + - string + - 'null' + si_identifier_type: + type: + - string + - 'null' + moneybird_payments_mandate: + type: + - boolean + - 'null' + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + version: + $ref: '#/components/schemas/version' + sales_invoices_url: + type: string + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + custom_fields: + type: array + items: + $ref: '#/components/schemas/custom_field_value_response' + contact_people: + type: array + items: + $ref: '#/components/schemas/contact_person_response' + archived: + type: boolean + source_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + asset_id: + $ref: '#/components/schemas/identifier' + detail_id: + $ref: '#/components/schemas/identifier' + general_journal_document_entry_id: + $ref: '#/components/schemas/identifier' + subscription_additional_charge_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + subscription_id: + $ref: '#/components/schemas/identifier_nullable' + product_id: + $ref: '#/components/schemas/identifier' + detail_id: + $ref: '#/components/schemas/identifier_nullable' + amount: + type: + - string + - 'null' + price: + type: string + period: + type: string + pattern: ^[0-9]{6}..[0-9]{6}$ + example: 202501..202506 + description: + type: string + subscription_product_response: + type: object + unevaluatedProperties: false + properties: + start_date: + type: string + format: date + end_date: + type: + - string + - 'null' + format: date + product_id: + $ref: '#/components/schemas/identifier' + product: + $ref: '#/components/schemas/product_response' + amount: + type: string + discount: + type: + - string + - 'null' + subscription_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + start_date: + type: string + format: date + end_date: + type: + - string + - 'null' + format: date + frequency: + type: + - integer + - 'null' + frequency_type: + type: + - string + - 'null' + enum: + - day + - week + - month + - quarter + - year + - null + reference: + type: + - string + - 'null' + cancelled_at: + type: + - string + - 'null' + format: date-time + product_id: + $ref: '#/components/schemas/identifier' + product: + $ref: '#/components/schemas/product_response' + contact_id: + $ref: '#/components/schemas/identifier' + contact: + $ref: '#/components/schemas/simple_contact_response' + contact_person_id: + $ref: '#/components/schemas/identifier_nullable' + contact_person: + oneOf: + - $ref: '#/components/schemas/contact_person_response' + - type: 'null' + subscription_products: + type: array + items: + $ref: '#/components/schemas/subscription_product_response' + recurring_sales_invoice_id: + $ref: '#/components/schemas/identifier_nullable' + subscription_template_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + workflow_id: + $ref: '#/components/schemas/identifier' + document_style_id: + $ref: '#/components/schemas/identifier' + mergeable: + type: boolean + contact_can_update: + type: boolean + products: + type: array + items: + $ref: '#/components/schemas/product_response' + symbolic_error: + type: object + properties: + error: + type: + - string + symbolic: + type: object + additionalProperties: + type: + - string + - object + - array + task_list_group_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + name: + type: + - string + - 'null' + row_order: + type: integer + report_type: + type: + - string + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + tasks: + type: array + items: + $ref: '#/components/schemas/task_list_task_response' + task_list_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/identifier' + name: + type: string + description: + type: + - string + - 'null' + deadline_on: + type: + - string + - 'null' + format: date + period_begin: + type: + - string + - 'null' + format: date + period_end: + type: + - string + - 'null' + format: date + completed: + type: boolean + template_id: + $ref: '#/components/schemas/identifier_nullable' + total_tasks_count: + type: integer + completed_tasks_count: + type: integer + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + groups: + type: array + items: + $ref: '#/components/schemas/task_list_group_response' + task_list_task_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/identifier' + name: + type: string + description: + type: + - string + - 'null' + row_order: + type: integer + completed_at: + type: + - string + - 'null' + format: date-time + report_type: + type: + - string + - 'null' + task_lists_group_id: + $ref: '#/components/schemas/identifier' + parent_task_id: + $ref: '#/components/schemas/identifier_nullable' + assignee_id: + $ref: '#/components/schemas/identifier_nullable' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + subtasks: + type: array + items: + $ref: '#/components/schemas/task_list_task_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + task_list_template_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/identifier' + name: + type: string + description: + type: + - string + - 'null' + period: + type: + - string + - 'null' + description: ISO 8601 duration string (e.g. "P1M" for one month, "P3M" for one quarter, "P1Y" for one year) + deadline_after: + type: + - string + - 'null' + description: ISO 8601 duration string representing the deadline offset from the period end + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + groups: + type: array + items: + $ref: '#/components/schemas/task_list_group_response' + tax_rate_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + name: + type: string + percentage: + oneOf: + - $ref: '#/components/schemas/number' + - type: 'null' + tax_rate_type: + type: string + enum: + - sales_invoice + - purchase_invoice + - general_journal_document + show_tax: + type: + - boolean + - 'null' + active: + type: + - boolean + - 'null' + country: + type: + - string + - 'null' + created_at: + type: + - string + - 'null' + format: date-time + updated_at: + type: + - string + - 'null' + format: date-time + tax_subtotal_response: + type: object + unevaluatedProperties: false + properties: + tax_rate_id: + $ref: '#/components/schemas/identifier' + taxable_amount: + $ref: '#/components/schemas/number' + taxable_amount_base: + $ref: '#/components/schemas/number' + tax_amount: + $ref: '#/components/schemas/number' + tax_amount_base: + $ref: '#/components/schemas/number' + taxonomy_item_response: + type: object + unevaluatedProperties: false + properties: + taxonomy_version: + type: string + code: + type: string + name: + type: string + name_english: + type: + - string + - 'null' + reference: + type: + - string + - 'null' + time_entry_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + project_id: + $ref: '#/components/schemas/identifier_nullable' + sales_invoice_id: + $ref: '#/components/schemas/identifier_nullable' + user_id: + $ref: '#/components/schemas/identifier' + started_at: + $ref: '#/components/schemas/timestamp' + ended_at: + oneOf: + - $ref: '#/components/schemas/timestamp' + - type: 'null' + description: + type: string + paused_duration: + type: integer + billable: + type: + - boolean + - 'null' + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + contact: + oneOf: + - $ref: '#/components/schemas/minimal_contact_response' + - type: 'null' + user: + $ref: '#/components/schemas/user_response' + project: + oneOf: + - $ref: '#/components/schemas/project_response' + - type: 'null' + sales_invoice: + oneOf: + - $ref: '#/components/schemas/sales_invoice_response' + - type: 'null' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + notes: + type: array + items: + $ref: '#/components/schemas/note_response' + timestamp: + type: string + format: date-time + typeless_document_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + contact_id: + $ref: '#/components/schemas/identifier_nullable' + contact: + oneOf: + - $ref: '#/components/schemas/simple_contact_response' + - type: 'null' + reference: + type: + - string + - 'null' + date: + type: string + format: date + state: + type: string + enum: + - new + - open + - late + - paid + - saved + - pending_payment + origin: + type: + - string + - 'null' + enum: + - upload + - endpoint + - si + - email + - si_local + - si_peppol + - api + - moneybird_bv + - mollie + - null + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + version: + $ref: '#/components/schemas/version' + attachments: + type: array + items: + $ref: '#/components/schemas/attachment_response' + events: + type: array + items: + $ref: '#/components/schemas/event_response' + user_response: + $ref: '#/components/schemas/base_user_response' + value_change_response: + type: object + unevaluatedProperties: false + properties: + type: + type: string + enum: + - divestment + - full_depreciation + - manual + - arbitrary + - linear + date: + type: string + format: date + amount: + $ref: '#/components/schemas/number' + description: + type: + - 'null' + - string + externally_booked: + type: boolean + asset_id: + $ref: '#/components/schemas/identifier' + verification_response: + type: object + unevaluatedProperties: false + properties: + emails: + type: array + items: + type: string + bank_account_numbers: + type: array + items: + type: string + chamber_of_commerce_number: + type: string + tax_number: + type: string + verifications_response: + $ref: '#/components/schemas/verification_response' + version: + type: integer + webhook_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + url: + type: string + enabled_events: + type: array + items: + type: string + description: List of events this webhook is subscribed to. See [webhook events](https://developer.moneybird.com/webhooks/events) for all available events and event groups. + last_http_status: + type: + - integer + - string + - 'null' + description: HTTP status code of the request last received back from the webhook + last_http_body: + type: + - string + - 'null' + description: Body of the request last received back from the webhook + token: + type: string + secret: + type: string + description: The webhook's secret, used to generate webhook signatures. Only returned at creation. + deactivated_at: + oneOf: + - $ref: '#/components/schemas/timestamp' + - type: 'null' + description: Timestamp when the webhook was deactivated. Null if the webhook is active. + workflow_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + type: + type: string + name: + type: string + default: + type: boolean + currency: + type: string + language: + type: string + active: + type: boolean + prices_are_incl_tax: + type: boolean + payment_methods: + type: + - array + - 'null' + items: + type: string + collection_method: + type: + - string + - 'null' + number_of_collections: + type: integer + show_qr_code: + type: boolean + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + steps: + type: array + items: + $ref: '#/components/schemas/workflow_step_response' + workflow_step_response: + type: object + unevaluatedProperties: false + properties: + id: + $ref: '#/components/schemas/identifier' + administration_id: + $ref: '#/components/schemas/administration_id' + step_order: + type: integer + due_interval: + type: integer + reminder_delay: + type: integer + reminder_text: + type: + - string + - 'null' + reminder_auto_send: + type: boolean + action: + type: + - string + - 'null' + enum: + - suspend_moneybird_account + - reactivate_moneybird_account + - warn_moneybird_account + - cancel_subscription + - null + created_at: + $ref: '#/components/schemas/timestamp' + updated_at: + $ref: '#/components/schemas/timestamp' + securitySchemes: + bearerAuth: + type: http + scheme: bearer From 2442ca5ad26bf4b9ad828113a8e8e39d77f74990 Mon Sep 17 00:00:00 2001 From: Sander van Hooft Date: Sun, 12 Jul 2026 01:11:49 +0200 Subject: [PATCH 2/4] ci: run tests on PRs, add PHPStan and docs build checks - run-tests.yml: trigger on pull_request and pushes to main, drop the path filter so the Tests status is always present (path-filtered workflows can't be used as required checks) - Add phpstan.yml: composer analyse on PRs and main. PHPStan level 5 with the 65 pre-existing errors pinned in phpstan-baseline.neon so CI only fails on new errors - Add docs-build.yml: build-only Astro check on PRs touching docs/** (deploy remains main-only) - composer.json: add phpstan/phpstan dev dependency and analyse script - CLAUDE.md: fix stale commands (composer format, PHPUnit not Pest), document the CI setup --- .github/workflows/docs-build.yml | 33 +++ .github/workflows/phpstan.yml | 29 +++ .github/workflows/run-tests.yml | 8 +- CLAUDE.md | 12 +- composer.json | 2 + phpstan-baseline.neon | 391 +++++++++++++++++++++++++++++++ phpstan.neon.dist | 7 + 7 files changed, 473 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/docs-build.yml create mode 100644 .github/workflows/phpstan.yml create mode 100644 phpstan-baseline.neon create mode 100644 phpstan.neon.dist diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml new file mode 100644 index 0000000..d800642 --- /dev/null +++ b/.github/workflows/docs-build.yml @@ -0,0 +1,33 @@ +name: Docs Build +permissions: + contents: read + +on: + pull_request: + paths: + - 'docs/**' + - '.github/workflows/docs-build.yml' + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: docs/package-lock.json + + - name: Install dependencies + run: npm ci + working-directory: docs + + - name: Build docs site + run: npm run build + working-directory: docs diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml new file mode 100644 index 0000000..efbbd17 --- /dev/null +++ b/.github/workflows/phpstan.yml @@ -0,0 +1,29 @@ +name: PHPStan +permissions: + contents: read + +on: + push: + branches: [ main ] + pull_request: + +jobs: + phpstan: + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + coverage: none + + - name: Install dependencies + run: composer update --prefer-dist --no-interaction + + - name: Run PHPStan + run: composer analyse -- --error-format=github diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 5e1fab9..b626b65 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -4,12 +4,8 @@ permissions: on: push: - paths: - - '**.php' - - '.github/workflows/run-tests.yml' - - 'phpunit.xml.dist' - - 'composer.json' - - 'composer.lock' + branches: [ main ] + pull_request: jobs: test: diff --git a/CLAUDE.md b/CLAUDE.md index 2938c44..659e947 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,11 +33,11 @@ src/Api/ # Run tests composer test -# Run static analysis +# Run static analysis (PHPStan level 5, baseline in phpstan-baseline.neon) composer analyse # Fix code style -composer fix-style +composer format # Run all checks composer test && composer analyse @@ -98,4 +98,10 @@ The API has a rate limit of 150 requests per 5 minutes. This is handled automati ## Testing -Tests are in `tests/` using Pest PHP. Run with `composer test`. +Tests are in `tests/` using PHPUnit. Run with `composer test`. + +## CI + +- **Tests** (`run-tests.yml`): PHPUnit matrix (PHP 8.2/8.3 × prefer-lowest/stable × ubuntu/windows) on pushes to `main` and all pull requests. +- **PHPStan** (`phpstan.yml`): `composer analyse` on pushes to `main` and all pull requests. New errors fail CI; pre-existing ones are pinned in `phpstan-baseline.neon` — shrink the baseline over time, don't add to it. +- **Docs Build** (`docs-build.yml`): builds the Astro docs site on pull requests touching `docs/**` (deploy still happens only on `main` via `deploy-docs.yml`). diff --git a/composer.json b/composer.json index ec993a9..8b81dce 100644 --- a/composer.json +++ b/composer.json @@ -28,6 +28,7 @@ }, "require-dev": { "laravel/pint": "^1.17", + "phpstan/phpstan": "^2.2", "phpunit/phpunit": "^11.3", "symfony/var-dumper": "^7.1" }, @@ -47,6 +48,7 @@ "scripts": { "test": "vendor/bin/phpunit", "test-coverage": "vendor/bin/phpunit --coverage", + "analyse": "vendor/bin/phpstan analyse --memory-limit=1G", "format": "vendor/bin/pint" }, "config": { diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 0000000..19327c2 --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,391 @@ +parameters: + ignoreErrors: + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Contacts/AdditionalCharges/AdditionalCharge.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Contacts/ContactPeople/ContactPerson.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Contacts/MbPaymentsMandate/MbPaymentsMandate.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Contacts/MbPaymentsMandate/MbPaymentsMandateUrl.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Contacts/Notes/Note.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Contacts/UsageCharges/UsageCharge.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/CustomFields/CustomField.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/DocumentStyles/DocumentStyle.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Documents/GeneralDocuments/GeneralDocument.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Documents\\GeneralDocuments\\GeneralDocumentsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Documents/GeneralDocuments/GeneralDocumentsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Documents/GeneralJournalDocuments/GeneralJournalDocument.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Documents\\GeneralJournalDocuments\\GeneralJournalDocumentsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Documents/GeneralJournalDocuments/GeneralJournalDocumentsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Documents/PurchaseInvoices/PurchaseInvoice.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Documents\\PurchaseInvoices\\PurchaseInvoicesEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Documents/PurchaseInvoices/PurchaseInvoicesEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Documents/Receipts/Receipt.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Documents\\Receipts\\ReceiptsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Documents/Receipts/ReceiptsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Documents/TypelessDocuments/TypelessDocument.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Documents\\TypelessDocuments\\TypelessDocumentsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Documents/TypelessDocuments/TypelessDocumentsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Estimates/Estimate.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Estimates\\EstimatesEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Estimates/EstimatesEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/FinancialAccounts/FinancialAccount.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\FinancialAccounts\\FinancialAccountsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/FinancialAccounts/FinancialAccountsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/FinancialMutations/FinancialMutation.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\FinancialMutations\\FinancialMutationsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/FinancialMutations/FinancialMutationsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/FinancialStatements/FinancialStatement.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\FinancialStatements\\FinancialStatementsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/FinancialStatements/FinancialStatementsEndpoint.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Identities\\IdentitiesEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Identities/IdentitiesEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Identities/Identity.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/ImportMappings/ImportMapping.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\ImportMappings\\CreateImportMappingRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/ImportMappings/ImportMappingsEndpoint.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\ImportMappings\\UpdateImportMappingRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/ImportMappings/ImportMappingsEndpoint.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\ImportMappings\\ImportMappingsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/ImportMappings/ImportMappingsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/LedgerAccounts/LedgerAccount.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\LedgerAccounts\\CreateLedgerAccountRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/LedgerAccounts/LedgerAccountsEndpoint.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\LedgerAccounts\\UpdateLedgerAccountRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/LedgerAccounts/LedgerAccountsEndpoint.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\LedgerAccounts\\LedgerAccountsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/LedgerAccounts/LedgerAccountsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Payments/Payment.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Payments\\PaymentsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Payments/PaymentsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Products/Product.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Products\\CreateProductRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Products/ProductsEndpoint.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Products\\UpdateProductRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Products/ProductsEndpoint.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Products\\ProductsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Products/ProductsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Projects/Project.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Projects\\CreateProjectRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Projects/ProjectsEndpoint.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Projects\\UpdateProjectRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Projects/ProjectsEndpoint.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\Projects\\ProjectsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/Projects/ProjectsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/PurchaseTransactions/PurchaseTransaction.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\PurchaseTransactions\\PurchaseTransactionsEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/PurchaseTransactions/PurchaseTransactionsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/RecurringSalesInvoices/RecurringSalesInvoice.php + + - + message: '#^Method Sandorian\\Moneybird\\Api\\RecurringSalesInvoices\\RecurringSalesInvoicesEndpoint\:\:paginate\(\) should return iterable\&Saloon\\PaginationPlugin\\Paginator but returns Sandorian\\Moneybird\\Api\\Support\\MoneybirdPaginator\.$#' + identifier: return.type + count: 1 + path: src/Api/RecurringSalesInvoices/RecurringSalesInvoicesEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/SalesInvoices/Payments/SalesInvoicePayment.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/SubscriptionTemplates/SubscriptionTemplate.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\SubscriptionTemplates\\CreateSubscriptionTemplateRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/SubscriptionTemplates/SubscriptionTemplatesEndpoint.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\SubscriptionTemplates\\UpdateSubscriptionTemplateRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/SubscriptionTemplates/SubscriptionTemplatesEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Subscriptions/Subscription.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Subscriptions\\CreateSubscriptionRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Subscriptions/SubscriptionsEndpoint.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Subscriptions\\UpdateSubscriptionRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Subscriptions/SubscriptionsEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Support/BaseDto.php + + - + message: '#^PHPDoc tag @return with type mixed is not subtype of native type Sandorian\\Moneybird\\Api\\Support\\BaseDto\.$#' + identifier: return.phpDocType + count: 1 + path: src/Api/Support/BaseEndpoint.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Support/IdVersion.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/TimeEntries/TimeEntry.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Users/User.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: src/Api/Verifications/Verification.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Verifications\\CreateVerificationRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Verifications/VerificationsEndpoint.php + + - + message: '#^Call to function method_exists\(\) with Sandorian\\Moneybird\\Api\\Verifications\\UpdateVerificationRequest and ''setEncapsulatedData'' will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Api/Verifications/VerificationsEndpoint.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..bc0f2c3 --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,7 @@ +includes: + - phpstan-baseline.neon + +parameters: + level: 5 + paths: + - src From 27b409a9b01d4ef83fc3bd12abf3795a20c99f19 Mon Sep 17 00:00:00 2001 From: Sander van Hooft Date: Sun, 12 Jul 2026 01:17:28 +0200 Subject: [PATCH 3/4] ci: bump checkout to v7, add composer audit workflow - actions/checkout v6 -> v7 in all workflows (v7 blocks pwn-request patterns by default in pull_request_target workflows; our only pull_request_target workflow, dependabot-auto-merge, never checks out PR code) - Add composer-audit.yml: composer audit with latest Composer against a prefer-stable resolution, on main pushes, PRs, and a weekly cron. Prefer-stable is required: prefer-lowest resolves Saloon v3, whose known advisories are accepted for backwards compatibility - Document both in CLAUDE.md CI section --- .github/workflows/composer-audit.yml | 33 +++++++++++++++++++ .github/workflows/deploy-docs.yml | 2 +- .github/workflows/docs-build.yml | 2 +- .../workflows/fix-php-code-style-issues.yml | 2 +- .github/workflows/phpstan.yml | 2 +- .github/workflows/run-tests.yml | 2 +- .github/workflows/update-changelog.yml | 2 +- CLAUDE.md | 2 ++ 8 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/composer-audit.yml diff --git a/.github/workflows/composer-audit.yml b/.github/workflows/composer-audit.yml new file mode 100644 index 0000000..2443d14 --- /dev/null +++ b/.github/workflows/composer-audit.yml @@ -0,0 +1,33 @@ +name: Composer Audit +permissions: + contents: read + +on: + push: + branches: [ main ] + pull_request: + schedule: + # Weekly, so new advisories surface without waiting for a push + - cron: '30 6 * * 1' + +jobs: + audit: + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Checkout code + uses: actions/checkout@v7 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + tools: composer:latest + coverage: none + + - name: Install dependencies (prefer-stable) + run: composer update --prefer-stable --prefer-dist --no-interaction + + - name: Audit dependencies + run: composer audit diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index e49e793..bdab9db 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout your repository using git - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Install, build, and upload your site uses: withastro/action@v5 with: diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index d800642..f5beecd 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Setup Node uses: actions/setup-node@v4 diff --git a/.github/workflows/fix-php-code-style-issues.yml b/.github/workflows/fix-php-code-style-issues.yml index bea1f92..1f3f433 100644 --- a/.github/workflows/fix-php-code-style-issues.yml +++ b/.github/workflows/fix-php-code-style-issues.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: ref: ${{ github.head_ref }} diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index efbbd17..5e320ae 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Setup PHP uses: shivammathur/setup-php@v2 diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index b626b65..caca0ef 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Setup PHP uses: shivammathur/setup-php@v2 diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index c6c3e24..499d9b3 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: ref: main diff --git a/CLAUDE.md b/CLAUDE.md index 659e947..4e9969b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -105,3 +105,5 @@ Tests are in `tests/` using PHPUnit. Run with `composer test`. - **Tests** (`run-tests.yml`): PHPUnit matrix (PHP 8.2/8.3 × prefer-lowest/stable × ubuntu/windows) on pushes to `main` and all pull requests. - **PHPStan** (`phpstan.yml`): `composer analyse` on pushes to `main` and all pull requests. New errors fail CI; pre-existing ones are pinned in `phpstan-baseline.neon` — shrink the baseline over time, don't add to it. - **Docs Build** (`docs-build.yml`): builds the Astro docs site on pull requests touching `docs/**` (deploy still happens only on `main` via `deploy-docs.yml`). +- **Composer Audit** (`composer-audit.yml`): `composer audit` (latest Composer) against a prefer-stable resolution, on pushes to `main`, all pull requests, and a weekly cron. Must stay prefer-stable: prefer-lowest would resolve Saloon v3, which has known advisories accepted for BC. +- Workflows use `actions/checkout@v7` (blocks pwn-request patterns by default in `pull_request_target` workflows). The only `pull_request_target` workflow (`dependabot-auto-merge.yml`) deliberately never checks out PR code. From 8321ebf3252d26762608b7dd5bad20108f0b3dba Mon Sep 17 00:00:00 2001 From: Sander van Hooft Date: Sun, 12 Jul 2026 01:21:44 +0200 Subject: [PATCH 4/4] ci: test all officially supported PHP versions (8.2-8.5) - Extend the test matrix from PHP 8.2/8.3 to 8.2-8.5, matching the versions currently supported by the PHP project - Run PHPStan and composer audit on PHP 8.5 - composer.json "php": "^8.2" already matches the supported set exactly; no constraint change needed - Document the PHP support policy in CLAUDE.md (drop 8.2 from matrix and constraint after its 2026-12-31 EOL) --- .github/workflows/composer-audit.yml | 2 +- .github/workflows/phpstan.yml | 2 +- .github/workflows/run-tests.yml | 2 +- CLAUDE.md | 4 +++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/composer-audit.yml b/.github/workflows/composer-audit.yml index 2443d14..97641b2 100644 --- a/.github/workflows/composer-audit.yml +++ b/.github/workflows/composer-audit.yml @@ -22,7 +22,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '8.3' + php-version: '8.5' tools: composer:latest coverage: none diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index 5e320ae..c12c51a 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -19,7 +19,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '8.3' + php-version: '8.5' coverage: none - name: Install dependencies diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index caca0ef..beba21b 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -15,7 +15,7 @@ jobs: fail-fast: true matrix: os: [ubuntu-latest, windows-latest] - php: [8.3, 8.2] + php: [8.5, 8.4, 8.3, 8.2] stability: [prefer-lowest, prefer-stable] name: P${{ matrix.php }} - ${{ matrix.stability }} - ${{ matrix.os }} diff --git a/CLAUDE.md b/CLAUDE.md index 4e9969b..c1290cf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -102,8 +102,10 @@ Tests are in `tests/` using PHPUnit. Run with `composer test`. ## CI -- **Tests** (`run-tests.yml`): PHPUnit matrix (PHP 8.2/8.3 × prefer-lowest/stable × ubuntu/windows) on pushes to `main` and all pull requests. +- **Tests** (`run-tests.yml`): PHPUnit matrix (PHP 8.2–8.5 × prefer-lowest/stable × ubuntu/windows) on pushes to `main` and all pull requests. - **PHPStan** (`phpstan.yml`): `composer analyse` on pushes to `main` and all pull requests. New errors fail CI; pre-existing ones are pinned in `phpstan-baseline.neon` — shrink the baseline over time, don't add to it. - **Docs Build** (`docs-build.yml`): builds the Astro docs site on pull requests touching `docs/**` (deploy still happens only on `main` via `deploy-docs.yml`). - **Composer Audit** (`composer-audit.yml`): `composer audit` (latest Composer) against a prefer-stable resolution, on pushes to `main`, all pull requests, and a weekly cron. Must stay prefer-stable: prefer-lowest would resolve Saloon v3, which has known advisories accepted for BC. - Workflows use `actions/checkout@v7` (blocks pwn-request patterns by default in `pull_request_target` workflows). The only `pull_request_target` workflow (`dependabot-auto-merge.yml`) deliberately never checks out PR code. + +**PHP support policy:** support exactly the PHP versions officially supported by the PHP project (php.net/supported-versions). As of 2026-07: 8.2, 8.3 (security), 8.4, 8.5 — hence `"php": "^8.2"` in composer.json and the 8.2–8.5 CI matrix. When a version reaches EOL (8.2 on 2026-12-31), drop it from the matrix and bump the composer constraint in the next major/minor release.