diff --git a/.github/workflows/composer-audit.yml b/.github/workflows/composer-audit.yml
new file mode 100644
index 0000000..97641b2
--- /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.5'
+ 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
new file mode 100644
index 0000000..f5beecd
--- /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@v7
+
+ - 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/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
new file mode 100644
index 0000000..c12c51a
--- /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@v7
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.5'
+ 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..beba21b 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:
@@ -19,14 +15,14 @@ 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 }}
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 b7b4fef..c1290cf 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/`
@@ -31,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
@@ -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,10 +79,33 @@ 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.
## 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.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.
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/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/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: |
+
+
+
+ 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.
+