# Moneybird API Documentation
> Complete documentation for Large Language Models
---
## Document: Welcome to Moneybird
URL: /introduction
# Welcome to Moneybird
The Moneybird API allows you to interact with a Moneybird account. The API
is RESTful and uses JSON and XML to transport information. Use cases for interacting with a
Moneybird account through the API include:
[sending of invoices](api/sales-invoices#sends-an-invoice)
automatically from your webshop or backend,
[synchronising contact information](api/contacts#get-contact-by-customer-id)
or [importing products](api/products#list-all-products-of-an-administration).
This API documentation will get you started with your first requests with
our API. Make sure to read this guide completely to know all aspects of our API.
## Sandbox Administration
We offer special sandbox administrations to test your API integration.
These administrations grant full access to all our features without the
need to subscribe to our services. Sandbox accounts have limitations for
production use: for example, invoices have watermarks.
To open a sandbox administration, make sure you have a Moneybird user
account by registering on our website. If you already have an account,
there is no need to register again. Once you are logged in, [visit the
sandbox creation
page](https://moneybird.com/administrations/sandboxes/new) to create a
sandbox.
## REST API Basics
A REST
API describes the resources you can access in a clearly defined path
structure. This documentation contains a reference for each resource in
the API. Before you can use these resources, you need to know the basics
of accessing the Moneybird REST API.
### Paths
The Moneybird API resides on the following path:
```
https://moneybird.com/api/:version/:administration_id/:resource_path.:format
```
- The **:version** part of the path indicates the version of the API you
want to use. At this moment version `v2` is the only available
version. By pointing to a specific version, we can make sure you
always can expect equal behaviour from our API.
- The **:administration_id** part indicates the administration you want
to access. This ID corresponds with the ID you see in the path when
you are accessing the administration via our web application.
- The **:resource_path** part indicates the path of the resource you
want to access. Specific paths to resources can be found in the API
documentation. Examples of resource paths are: `/contacts` to retrieve
all contacts or `/contacts/:id/notes` to create new note for a
contact.
- The **:format** part indicates the format in which you want to
transport data. Currently two formats are supported: `json` and `xml`.
## IDs
Each resource in Moneybird has an unique ID. These IDs are large
integers. Some JSON parsing tools may have trouble with these large
integers. To prevent problems, we recommend to parse the IDs as
strings.
## Authentication
To interact with a Moneybird account through the API, you need to
authenticate yourself. Authentication can be done through OAuth or by
using a personal API token.
For more details about authentication, go to the
[Authentication](/authentication) page.
## Requests
There are different approaches for making requests to our API. The
command line tool [curl](http://curl.haxx.se/) is easy and fast for
testing our API. When you want to integrate the API into your own
software, you can choose to use a general purpose REST library or a
specific library for the Moneybird API.
- **Ruby**: [REST Client](https://github.com/rest-client/rest-client),
[ActiveResource](https://github.com/rails/activeresource) or
[Moneybird Ruby client by Maarten van
Vliet](https://github.com/maartenvanvliet/moneybird)
- **PHP**: [Moneybird PHP client by
Picqer](https://github.com/picqer/moneybird-php-client),
[Httpful](https://github.com/nategood/httpful) or [plain
cURL](/php-with-curl)
- **JS**: [Moneybird JS client by
Print.one](https://github.com/print-one/moneybird-js)
We will use curl in the examples in the documentation. To retrieve a
list of contacts from a Moneybird account, you can perform the following
request:
```bash
curl -XGET -H "Content-Type: application/json" -H "Authorization: Bearer 84ec207ad0154a508f798e615a998ac1fd752926d00f955fb1df3e144cba44ab" https://moneybird.com/api/v2/107693607045039116/contacts.json
```
A REST API uses HTTP methods to determine which action to perform on the
resource. The Moneybird API responds to GET, POST, PATCH, PUT and DELETE
methods. Updating a resource is normally done using PATCH. The Moneybird
API also responds to PUT to update a resource, because this method is
used by some REST client libraries.
Please note that our API requests are cached for performance
optimization. As a result, we strongly advise against using GET methods
for verification purposes as this may result in an incomplete result. To
verify API requests, developers can check the response status codes
returned by the API.
## Responses
The Moneybird API will always respond with an HTTP status code. This code
informs you about the outcome of the API call. The API can return the
following HTTP status codes:
| | | |
|----|----|----|
| 200 | OK | Request was successful |
| 201 | Created | Entity creation was successful |
| 204 | No Content | Entity deletion was successful |
| 400 | Bad request | Parameters for the request are missing or malformed. Body contains the errors. |
| 401 | Authorization required | No authorization provided or invalid authorization information provided |
| 402 | Payment Required | Account limit reached |
| 403 | Forbidden | IP is blacklisted for API usage, see [Throttling](#throttling) information |
| 404 | Not found | Entity not found |
| 405 | Method Not Allowed | The endpoint with this HTTP method is not available in the API |
| 406 | Not accepted | The requested content type is not supported by the API |
| 422 | Unprocessable entity | Saving the entity in the database failed due to validation errors. Body contains the errors. |
| 429 | Too many requests | See [Throttling](#throttling) information |
| 500 | Internal server error | Something went wrong while processing the request. This is unexpected behaviour and requires Moneybird to fix the scenario. |
After reading the HTTP status code, you can determine if the request
body should be parsed. The body is in JSON or XML format, based on your
request format. Most non-success error codes provide extra details in
the body. Make sure to process this body, because they will provide
valuable information while debugging.
## Pagination
Endpoints returning a list of entities are paginated to prevent large
responses. To control the pagination, you can use the `page` and
`per_page` parameters. `page` determines which page to return (default:
1), `per_page` controls the amount of entities to return (default: 50,
maximum: 100)
Each paginated response contains a `Link` header with information about
the previous and next page:
```http
Link: ; rel="next",
; rel="prev"
```
## Throttling
Usage of the Moneybird API is unlimited within the subscription and
permissions of the Moneybird account you are using. To prevent fraud and
abuse, requests to the API are throttled on a per ip-address basis. You can request the API 150
times each 5 minutes, with a stricter limit of 50 requests per 5 minutes
for all the `/reports/` endpoints.
The API will respond with a **429 Too many requests** response. This
response contains the following fields in the headers:
`Retry-After` containing the time after which a new request can be made.
`RateLimit-Remaining` containing the time remaining before a new request
can be made.
`RateLimit-Limit` containing the total limit.
`RateLimit-Reset` containing the time after which a new request can be
made.
Partners with popular Oauth Applications can request a per-administration limit
instead of ip-address limits. We can also make special volume based price agreements
for accounts that consistently hit our rate limits due to their volumes. For both cases,
please contact our support team.
## Time Zones
For some API operations the time zone matters and using different time
zones may result in API unsuccessful requests. There are several ways in
which Moneybird determines the time zone used to process an API request.
### The `Time-Zone` header
A `Time-Zone` header can be specified for each request containing a time
zone from the [list of tz database time
zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
The request will then be processed in the provided time zone.
### The administration time zone
If no `Time-Zone` header is provided and the API request happens within
the scope of an administration, the time zone configured in the
administration settings will be used when processing the API request.
### UTC
If both of the above methods don't result in a time zone, the request
will be processed in UTC instead.
---
## Document: Authentication
URL: /authentication
# Authentication
To access the resources in the Moneybird API, you first need to
authenticate the user. This can be done through the
[OAuth2](http://oauth.net/2/) protocol, which allows limited access to a
HTTP service with secured resources. Alternatively, you can create a
personal API token that simplifies the setup, at a cost of security.
## Registration of your application
Before you can use OAuth2 in our API, you need to register your
application with Moneybird. Registration allows us to see which
application is authenticating and who is the owner of the application.
Registration is a one-time event for the developer and can be done by
logging in to your Moneybird account and visit the page
[https://moneybird.com/user/applications/new](https://moneybird.com/user/applications/new).
When registering, you get the option to either create a personal API
token that you can use as a Bearer token or registering an external
OAuth application.
After registering, you will either receive a Bearer token when
registering a personal API token, or you will receive a `Client ID` and
`Client Secret` for the external OAuth application. When using a
personal API token, ensure that you store this token securely. It is
similar to a password and gives access to your entire company account.
## Scopes
Your application can be limited to receive access to limited parts of
the administration. This is done by using
[scopes](http://tools.ietf.org/html/rfc6749#section-3.3). The following
scopes are available in Moneybird:
- `sales_invoices`
- `documents`
- `estimates`
- `bank`
- `time_entries`
- `settings`
For a personal API token, you can use the checkboxes to select the
scopes you need. When you use an external OAuth application, you need to
provide the scopes as a parameter in the authorization request.
Please note that either the `sales_invoices`, `documents`, `estimates`,
`bank` or `settings` scope is required to access contacts within the
Moneybird API. Having access to only `time_entries` will not allow you
to access contacts.
If no scope is provided, the `sales_invoices` scope is used by default.
## Authentication using Oauth
In order to access the API on behalf of a user, you need to get an
`access token`. This token will give you access to the resource
belonging to the user in the given scope. During the authentication of
your user, Moneybird creates a special API user with access to the
administration. All actions performed by your application, will be named
based on the application you registered.
Authenticating a user consists of the following steps, as prescribed by
the [OAuth 2.0 protocol](http://oauth.net/2/):
1. In your application, obtain a request token and authorize URL using
a [Authorization
Request](https://tools.ietf.org/html/rfc6749#section-4.1.1). The
`client_id` and `redirect_uri` parameters *must exactly* match those
from the application you created in [Registration of your
application](#registration-of-your-application):
```bash
curl -vv \
'https://moneybird.com/oauth/authorize?client_id=9a833de2d13b07dfdfb50a8124b148d8&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code'
```
If you want to use specific scopes, you can add the `scope` parameter:
```bash
curl -vv \
'https://moneybird.com/oauth/authorize?client_id=9a833de2d13b07dfdfb50a8124b148d8&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=extimates%20bank'
```
2. The response of the HTTP request contains a `Location` header and
HTML content pointing towards an authorize url. Redirect your user
to this url. Moneybird present the user with a login screen, checks
all credentials (user should be owner of the administration) and
presents the user with an authorization screen:

3. When the user authorizes your application, Moneybird redirects the
user to the `redirect URI` you provided in the first step. If you
use the `urn:ietf:wg:oauth:2.0:oob` redirect URI to indicate that
the redirect URI is Out-of-Band, the user will not be redirected.
Instead the code is displayed in the webbrowser.
```bash
1192e141cfd1839e1d477ac0f91268deec523fae5d14748547a8a22fc3a5b39b
```
4. With the tokens provided in the request, you can exchange your
request token for an access token with an [Access Token
Request](https://tools.ietf.org/html/rfc6749#section-4.1.3):
```bash
curl -vv \
-X POST \
-d "client_id=9a833de2d13b07dfdfb50a8124b148d8&client_secret=b376c8fbed732a5d1495a510a2f7d2738cdd4986516f1d34dd5cc00de4dcfe11&code=1192e141cfd1839e1d477ac0f91268deec523fae5d14748547a8a22fc3a5b39b&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code" \
https://moneybird.com/oauth/token
```
```json
{
"access_token":"b3f3bcf941029c00f602863492e188a64397c0f38be6a178e32721b6e3999621",
"token_type":"bearer",
"refresh_token":"9ef39031f3b31fe2af68a7390ecaf370f9321ddb74c5b8fdff91fd3aaf17dcce",
"scope":"sales_invoices",
"created_at":1471524338
}
```
5. The [response](https://tools.ietf.org/html/rfc6749#section-4.2.2)
contains an `Access token` which you can use to connect with the
API. The `Refresh token` can be used to retrieve a new access token
in case the access token can expire. In that case, an `expires_in`
is given. Both the access token and the refresh token should be
persisted to be used for future requests.
As of now, this token does not expire, but we might change this in
the future. Therefore it is advised to keep this in mind and prepare
your application accordingly.
6. To refresh an access token with the refresh token, call the token
url:
```bash
curl -vv \
-X POST \
-d "client_id=9a833de2d13b07dfdfb50a8124b148d8&client_secret=b376c8fbed732a5d1495a510a2f7d2738cdd4986516f1d34dd5cc00de4dcfe11&grant_type=refresh_token&refresh_token=9ef39031f3b31fe2af68a7390ecaf370f9321ddb74c5b8fdff91fd3aaf17dcce" \
https://moneybird.com/oauth/token
```
There are plenty of OAuth 2.0 client libraries that can be used to make
the CURL commands in the above example easier. The [OAuth
2.0](http://oauth.net/2/) website has a list with client libraries and
documentation.
## Accessing resources using the access token
To access a resource in Moneybird, you will need an access token. You
can retrieve the access token through the above OAuth process.
Alternatively, you can use an API token for personal usage when your
application does not support OAuth.
Add the access token in the Authorization header of every request to the
API:
```bash
curl -XGET -H "Content-Type: application/json" -H "Authorization: Bearer 84ec207ad0154a508f798e615a998ac1fd752926d00f955fb1df3e144cba44ab" https://moneybird.com/api/v2/107693607045039116/contacts.json
```
---
## Document: Verifying signatures
URL: /webhooks/verifying-signatures
# Verifying signatures
Every webhook request Moneybird sends includes a `Moneybird-Signature` header. Use it to verify that the request was sent by Moneybird and that the payload was not modified in transit. Verification is optional but strongly recommended for any production integration.
## The `Moneybird-Signature` header
The header contains a timestamp and one or more signatures, separated by commas:
```
Moneybird-Signature: t=1748534400,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd
```
- `t=` — the delivery timestamp as a Unix epoch (seconds).
- `v1=` — an HMAC-SHA256 digest of the signed payload, hex-encoded.
During a [secret rotation](#managing-your-signing-secret) the header carries one `v1=` digest per currently active secret:
```
Moneybird-Signature: t=1748534400,v1=5257a869...,v1=6ffbb59b...
```
Future signing schemes may introduce new prefixes. Ignore any scheme you do not recognise to prevent downgrade attacks.
## How to verify
1. Split the header on `,` and parse each `key=value` pair.
2. Extract `t` and collect every `v1` value.
3. Build the signed payload by concatenating the timestamp, a literal `.`, and the **raw request body** as received on the wire:
```
signed_payload = "{t}.{raw_request_body}"
```
The body must be the exact bytes received. Re-serialising the JSON (for example after parsing and re-encoding) will change byte-for-byte content and break verification.
4. Compute `HMAC-SHA256(signing_secret, signed_payload)` and hex-encode the result.
5. Compare your computed digest to each `v1` value using a constant-time comparison. Accept the request if **any** value matches.
6. Reject the request if `t` is more than 5 minutes away from the current time. The timestamp is part of the signed payload, so an attacker cannot modify it without also invalidating the digest, but a freshness check protects against replay.
## Managing your signing secret
**Retrieving the secret.** When you create a webhook via `POST /{administration_id}/webhooks.json`, the response body includes a `secret` field. This is the only time the secret is exposed through the API — store it in your secret manager immediately. `GET`, `activate`, and `deactivate` responses do not include the `secret` field.
**Recovery and rotation.** If you lose the secret, or want to rotate it after a suspected leak, open the webhook on its detail page inside Moneybird. The secret can be revealed there after an MFA confirmation, and the same page supports rotation. When you rotate, you choose a grace period during which the previous secret remains valid alongside the new one.
**Behaviour during a rotation grace period.** While both secrets are active, every delivery's `Moneybird-Signature` header carries one `v1=` digest per active secret. Recipients that accept *any* matching digest (step 5 above) continue to verify successfully throughout the rollover — first against the old secret, and against the new secret once they have updated their stored value.
**Existing webhooks.** Webhooks created before signing was introduced have been backfilled with a secret, so signed requests are sent for every webhook regardless of when it was registered. To obtain the secret for a pre-existing webhook, reveal it through the webhook detail page in Moneybird.
---
## Document: Subscribing to Payment Updates
URL: /webhooks/subscribing-to-payment-updates
# Subscribing to Payment Updates
Keep your store, order management, or CRM in sync the moment an invoice is paid by subscribing to Moneybird webhook events.
## Overview
Webhooks send your server a POST request when something changes in your administration. This page is a practical example of how to subscribe to webhook events and covers a frequently used scenario. To react to payments, subscribe to the specific invoice-paid events and update your system when they arrive. While there are many more events you can subscribe to, this page is an easy guide for subscribing to payment updates.
Useful background:
- See [Webhooks: Getting started](/webhooks/getting-started)
- Event list: [Webhooks: Events](/webhooks/events)
- Payload shape: [Webhooks: Payload](/webhooks/payload)
## Prerequisites
- You have an access token and your administration ID. See [Getting started](/integration/getting-started) and [Authentication](/authentication).
- You have a public HTTPS endpoint that returns HTTP 200 OK for deliveries.
## Recommended events
To know when an invoice is fully paid:
- `sales_invoice_state_changed_to_paid` (for regular sales invoices)
- `external_sales_invoice_state_changed_to_paid` (for external sales invoices)
Optionally, if you want to react to partial payments or reversals as well:
- `payment_registered` (a payment was added)
- `payment_destroyed` (a payment was removed)
Alternatively, you can subscribe to the event groups for state changes and filter in your code:
- `sales_invoice_state_changed`
- `external_sales_invoice_state_changed`
## Step-by-step
### 1. Create a webhook for payment updates
Register a webhook and subscribe to the paid events so your endpoint is called immediately when an invoice becomes paid.
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/webhooks.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"url": "https://example.com/webhooks/moneybird",
"enabled_events": [
"sales_invoice_state_changed_to_paid",
"external_sales_invoice_state_changed_to_paid"
]
}'
```
The response includes a `secret` field — this is the signing secret used to verify the `Moneybird-Signature` header on incoming deliveries, and it is only returned once. Store it in your secret manager immediately. See [Verifying signatures](/webhooks/verifying-signatures). The response also includes a `token`, which you can optionally compare to `webhook_token` in incoming payloads as a secondary check.
#### Alternative: subscribe to event groups
If you prefer to receive all state changes (paid, late, open, etc.) and filter client-side:
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/webhooks.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"url": "https://example.com/webhooks/moneybird",
"enabled_events": [
"sales_invoice_state_changed",
"external_sales_invoice_state_changed"
]
}'
```
List existing webhooks (useful for retrieving the stored `token` or debugging delivery results):
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/webhooks.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
### 2. Handle incoming webhook deliveries
Your endpoint will receive a JSON payload. At minimum:
- Always return HTTP 200 OK quickly.
- Use the `Idempotency-Key` header to avoid double-processing.
- Verify the `Moneybird-Signature` header against your stored signing secret — see [Verifying signatures](/webhooks/verifying-signatures). This is the recommended authenticity check.
- Optionally, also compare the `webhook_token` in the payload against the token you stored at registration time.
- Check `action` and proceed only for the payment-related events you care about (e.g., `sales_invoice_state_changed_to_paid`).
See the full example body in [Webhooks: Payload](/webhooks/payload). Key fields:
- `action`: the event name that triggered the delivery
- `entity_type`: `SalesInvoice` or `ExternalSalesInvoice`
- `entity_id`: the resource ID in Moneybird
### 3. Update your system
For a reliable workflow, fetch the current invoice state before updating your order:
```bash
# For SalesInvoice
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/sales_invoices/{SALES_INVOICE_ID}.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
# For ExternalSalesInvoice
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/external_sales_invoices/{EXTERNAL_SALES_INVOICE_ID}.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
If the state is `paid`, mark the corresponding order as paid in your system. If you subscribed to `payment_registered`, you can also reflect partial payments.
### 4. Monitor and troubleshoot
- On registration, Moneybird calls your URL and expects HTTP 200. If it fails, delivery will be retried with backoff.
- Use the [Webhooks API](/api/webhooks) to inspect `last_http_status` and `last_http_body` for each webhook.
- If you need to change subscriptions, delete and recreate the webhook with updated `enabled_events`.
## Next steps
- Learn about all available events: [Webhooks: Events](/webhooks/events)
---
## Document: Payload
URL: /webhooks/payload
# Payload
The URL in a webhook will be called by using a `POST` HTTP request. The HTTP body contains a JSON payload with the following structure:
Example payload
```json
{
"administration_id": "116015326147118082",
"webhook_id": "116010948233266179",
"webhook_token": "hPCNhskk1PwGC1pyJZMZmKNT",
"entity_type": "SalesInvoice",
"entity_id": "116015245643744263",
"state": "late",
"action": "sales_invoice_state_changed_to_late",
"entity": {
"id": "116015245643744263",
"contact_id": "116015245567198212",
"contact": {
"id": "116015245567198212",
"company_name": "Foobar Holding B.V.",
"firstname": "",
"lastname": "",
"attention": "",
"address1": "Hoofdstraat 12",
"address2": "",
"zipcode": "1234AB",
"city": "Amsterdam",
"country": "NL",
"email": "info@example.com",
"phone": "",
"send_method": "email",
"customer_id": "1",
"tax_number": "",
"chamber_of_commerce": "",
"bank_account": "",
"send_invoices_to_attention": "",
"send_invoices_to_email": "info@example.com",
"send_estimates_to_attention": "",
"send_estimates_to_email": "info@example.com",
"sepa_active": false,
"sepa_iban": "",
"sepa_bic": "",
"sepa_mandate_id": "",
"sepa_mandate_date": null,
"created_at": "2015-02-25T10:39:41.615Z",
"updated_at": "2015-02-25T10:39:41.615Z",
"notes": [
],
"custom_fields": [
]
},
"invoice_id": null,
"workflow_id": "116015053116802148",
"document_style_id": "116015053175522406",
"state": "late",
"invoice_date": null,
"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 het factuurnummer {document.invoice_id}. Voor vragen kunt u contact opnemen per e-mail.",
"reference": "Project X",
"language": "nl",
"currency": "EUR",
"discount": "0.0",
"paid_at": null,
"sent_at": null,
"created_at": "2015-02-25T10:39:41.685Z",
"updated_at": "2015-02-25T10:39:41.685Z",
"details": [
{
"id": "116015245648987144",
"tax_rate_id": "116015052994118749",
"ledger_account_id": "116015052938544219",
"amount": "1 x",
"description": "Project X",
"price": "300.0",
"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"
],
"created_at": "2015-02-25T10:39:41.693Z",
"updated_at": "2015-02-25T10:39:41.693Z"
}
],
"payments": [
],
"custom_fields": [
],
"notes": [
],
"attachments": [
]
}
}
```
The `entity` attribute contains a representation of the entity equal to the JSON representation you get when requesting the entity using the API. The `state` attribute contains the new state of the entity that triggered the push. Notice that the state in the push and the state in the entity can differ. The state of the entity could have changed in the meantime and always contains the current state in the database. The `action` attribute contains the name of the event that triggered the push.
### Headers
Each delivery includes a `Moneybird-Signature` header used to verify the payload's authenticity. See [Verifying signatures](/webhooks/verifying-signatures).
---
## Document: Getting started
URL: /webhooks/getting-started
# Getting started
Information in a Moneybird account is constantly changing. If you want to perform actions based on these changes, webhooks help you to achieve this. Instead of querying the API at a certain interval, Moneybird will notify you about changes to information in the bookkeeping.
### Usage
Webhooks are useful in a broad range of situations. When the state of a sales invoice changes, Moneybird will perform an HTTP request to the URL you provide. Based on the payload of the request, you can determine which action you need to perform.
How it works:
- You need a URL that Moneybird can call to deliver the payload. The Moneybird servers must be able to access this URL.
- You can add HTTP basic authentication or other token authentication in the URL, as long as the URL stays valid.
- Your URL always needs to respond with a `200` HTTP status. Upon registration this is checked.
- When your URL responds with another HTTP status code, Moneybird will retry to deliver the push 10 times. The time interval between retries is gradually extended.
- After each push, Moneybird will store the last HTTP status code and HTTP body. Using the [webhooks API](/api/webhooks), you can retrieve this information for debugging purposes.
You can register as many webhooks as required in an administration. Registration is done by sending [a POST request to the webhooks API](/api/webhooks/#post_webhooks).
:::warning
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.
:::
### Idempotency
Webhook push requests include an `Idempotency-Key` header. This value is unique for each individual webhook push. Since Moneybird retries a push if a non-200 status code is received, you can use this value to ensure that your backend never processes the same push twice.
### Signed payloads
Every webhook request includes a `Moneybird-Signature` header so you can verify the payload was sent by Moneybird and has not been modified in transit. See [Verifying signatures](/webhooks/verifying-signatures).
### Events
It is also possible to subscribe to events. When an event you are subscribed to occurs, Moneybird will perform an HTTP request to the URL you provide. A full list of available events can be found at [Events](/webhooks/events). If you decide to not subscribe to any events the old implementation will be used (notifications after state changes of sales invoices). This is to prevent existing webhooks from failing. If you would like to subscribe to a group of events, you can use the top level name of the event (eg. `estimate`).
---
## Document: Events
URL: /webhooks/events
# Events
import WebhookEvents from "./../../openapi/webhook_events.md";
Webhooks in Moneybird notify your application when certain events occur in your administration, such as the creation or update of an invoice, contact, or other resources. By subscribing to specific webhook events, you can automate workflows and keep your systems in sync with Moneybird in real time.
Below is a table listing all possible webhook events you can use when configuring your webhook's `enabled_events`:
---
## Document: Model Context Protocol (MCP)
URL: /tools/mcp
# Model Context Protocol (MCP)
The [Model Context Protocol](https://modelcontextprotocol.io) (MCP) is an open standard that lets AI assistants like Claude, ChatGPT, and Cursor call external tools and read data from your systems. Moneybird ships an official MCP server so an assistant can work directly with contacts, invoices, financial accounts, time entries, and the rest of your administration, authorized through OAuth.
## When to use MCP
Reach for MCP when you want an AI assistant to answer natural-language questions about your books, draft invoices or contacts from a conversation, or reconcile data across tools the assistant is connected to. For deterministic, always-on automations, call the API directly or use the [CLI](/tools/cli). MCP shines where a human is in the loop with an assistant.
## Endpoints
Moneybird exposes two MCP endpoints. Pick the one that matches the level of access you want to grant the assistant:
| Mode | URL | Access |
|------|-----|--------|
| Read-only | `https://moneybird.com/mcp/v1/read_only` | Retrieve data; no modifications |
| Read-write | `https://moneybird.com/mcp/v1/read_write` | Retrieve, create, and update data (deletion is not supported) |
Both endpoints use OAuth. When the assistant first connects, you authorize the connection in Moneybird and choose which administration to expose.
## Setup
Setup happens inside your assistant: Claude Desktop, ChatGPT, Cursor, or any other client that speaks remote MCP. Moneybird's end-user documentation has step-by-step instructions with screenshots and copy-paste snippets for each supported client:
[AI-koppeling (helpcenter.moneybird.nl)](https://helpcenter.moneybird.nl/nl/articles/396511-ai-koppeling)
## Custom clients
If you're building your own client or agent that can't use OAuth, call the Moneybird API directly with a personal API token. See [Authentication](/authentication) for details. The community-maintained [`moneybird-mcp-server`](https://github.com/vanderheijden86/moneybird-mcp-server) wraps token-based access in an MCP server you can self-host.
## Security considerations
- Start with `read_only` and move to `read_write` only when the assistant actually needs to make changes.
- Review assistant-drafted changes before confirming them, since MCP tools can write as well as read.
- Revoke the connection from Moneybird if the machine running the client is lost or compromised.
## Next steps
- Browse the full [API Reference](/api) to see what the assistant has access to
- Prefer scripting over conversation? Use the [CLI](/tools/cli) for the same access surface from a terminal
---
## Document: Command-line interface (CLI)
URL: /tools/cli
# Command-line interface (CLI)
The [Moneybird CLI](https://github.com/moneybird/moneybird-cli) is an official command-line interface for the Moneybird API. It reads the [OpenAPI specification](https://github.com/moneybird/openapi) at runtime to resolve commands, generate help, and map parameters, so the CLI stays in sync with the API automatically.
## When to use the CLI
Use the CLI to explore the API interactively, script ad-hoc automations, pipe Moneybird data into tools like `jq`, or prototype a request before wiring it into an application. For production integrations inside an application, call the API directly. The CLI is optimized for humans and agents working in a terminal.
## Quick start
```bash
curl -fsSL https://raw.githubusercontent.com/moneybird/moneybird-cli/main/install.sh | bash
moneybird-cli login
moneybird-cli contacts list
```
Create the API token under **Settings > External applications and AI connections > New API token** in Moneybird. See [Authentication](/authentication) for background on tokens and scopes.
## Full reference
Install options, shell completion, flag reference, config paths, and the full command catalog live in the upstream README:
[moneybird/moneybird-cli on GitHub](https://github.com/moneybird/moneybird-cli)
## Next steps
- Browse the full [API Reference](/api) to discover resources the CLI exposes
- Pair the CLI with [Webhooks](/webhooks/getting-started) for end-to-end automations
- Prefer conversation over scripting? Use [MCP](/tools/mcp) to reach the same surface from an AI assistant
---
## Document: Sending Sales Invoices with Peppol
URL: /integration/sending-sales-invoices-peppol
# Sending Sales Invoices with Peppol
Send sales invoices to your customers through the Peppol network directly from your integration.
## Overview
Peppol enables secure, standards-based e-invoicing between organizations. This guide focuses on sending a sales invoice with Peppol. It follows a similar flow as Creating Sales Invoices, but adds the Peppol-specific requirements.
## Prerequisites
- You have an access token and your administration ID. See [Getting started](/integration/getting-started) and [Authentication](/authentication).
- Your administration is registered for Peppol. Follow the signup steps in the Moneybird Help Center: [Aanmelden voor Peppol](https://helpcenter.moneybird.nl/nl/articles/227718-aanmelden-voor-peppol).
- Your customer (contact) has a Peppol identifier on file (`si_identifier_type` and `si_identifier`). For Dutch KVK this is `si_identifier_type` = `0106` and `si_identifier` = your customer’s KVK number.
> Tip: You can verify a registration via Participant Lookup by entering `0106` and the KVK number as described in the signup article above.
## Step-by-step
### 1. Ensure Peppol is enabled for your administration
Follow the steps in the Help Center article to enable Peppol in your Moneybird account: [Aanmelden voor Peppol](https://helpcenter.moneybird.nl/nl/articles/227718-aanmelden-voor-peppol).
### 2. Create or update the contact with a Peppol identifier
The contact must include a valid Peppol identifier so we can deliver via the network. You can also set the contact’s preferred `delivery_method` to `Peppol`.
Create a new contact with a Peppol identifier:
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"contact": {
"company_name": "TechStart Inc.",
"address1": "123 Business St",
"zipcode": "1234 AB",
"city": "Amsterdam",
"country": "NL",
"delivery_method": "Peppol",
"si_identifier_type": "0106",
"si_identifier": "12345678"
}
}'
```
Update an existing contact to add a Peppol identifier (if needed):
```bash
curl -X PATCH "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts/{CONTACT_ID}.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"contact": {
"delivery_method": "Peppol",
"si_identifier_type": "0106",
"si_identifier": "12345678"
}
}'
```
Notes:
- A contact requires a non-blank `company_name`, `firstname`, or `lastname`.
- `country` should be an ISO 3166-1 alpha-2 code (e.g., `NL`, `DE`).
- `si_identifier_type` accepts specific codes (e.g., `0106` for Dutch KVK). Use the appropriate code for your market.
### 3. Create the sales invoice (draft)
Create a draft sales invoice that references the contact:
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/sales_invoices.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"sales_invoice": {
"contact_id": "{CONTACT_ID}",
"reference": "INV-2025-001",
"invoice_date": "2025-09-16",
"due_date": "2025-10-16",
"currency": "EUR",
"details_attributes": [
{
"description": "Premium Software License",
"price": "299.00",
"amount": "1",
"tax_rate_id": "{TAX_RATE_ID}",
"ledger_account_id": "{LEDGER_ACCOUNT_ID}"
}
]
}
}'
```
### 4. Send the invoice with Peppol
Send the draft invoice through Peppol by specifying `delivery_method: Peppol` in the send request:
```bash
curl -X PATCH "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/sales_invoices/{SALES_INVOICE_ID}/send_invoice.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"sales_invoice_sending": {
"delivery_method": "Peppol"
}
}'
```
After sending, the invoice status changes from "draft" to "open". Track status changes with [Webhooks](/webhooks/getting-started) or by polling the invoice resource.
## Troubleshooting
- Delivery fails with validation errors (422): Ensure the contact has a valid `si_identifier_type` and `si_identifier`, and your administration is Peppol-enabled.
- Customer not found on Peppol: Confirm the correct identifier (e.g., KVK for NL with type `0106`) and verify registration via Participant Lookup as noted in the [Aanmelden voor Peppol](https://helpcenter.moneybird.nl/nl/articles/227718-aanmelden-voor-peppol) article.
## Related
- [Creating Sales Invoices](/integration/creating-sales-invoices)
- [Webhooks](/webhooks/getting-started)
---
## Document: Managing Subscriptions
URL: /integration/managing-subscriptions
# Managing Subscriptions
Automatically create and manage subscriptions for your customers, including recurring billing, additional charges, and one-off invoices.
## Overview
Subscriptions allow you to automatically invoice customers on a recurring basis for the services you provide. This integration pattern is ideal when:
- You offer recurring services or products (SaaS, membership, maintenance contracts)
- You need to bill usage-based charges or seat-based billing on top of base subscriptions
- You want to collect payments automatically via direct debit (SEPA) or credit card
- You need to send occasional one-off invoices alongside regular subscription billing
## Prerequisites
- You have an access token and your administration ID. See [Getting started](/integration/getting-started) and [Authentication](/authentication).
- You have created products for your subscription services. See [Products](/api/products).
- You know the correct `ledger_account_id` and `tax_rate_id` for your revenue. See [Ledger accounts](/api/ledger-accounts) and [Tax rates](/api/tax-rates).
- For automatic payment collection, Moneybird Payments must be enabled for your administration.
## Step-by-step
### 1. Create or Find Contact
Before creating a subscription, ensure you have a contact record in Moneybird.
**Create a new contact:**
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"contact": {
"company_name": "TechStart Inc.",
"firstname": "John",
"lastname": "Smith",
"address1": "123 Business St",
"zipcode": "1234 AB",
"city": "Amsterdam",
"country": "NL",
"email": "john@techstart.com",
"customer_id": "external_id_12345"
}
}'
```
### 2. Set Up Payment Mandate (Optional but Recommended)
For automatic payment collection, set up a Moneybird Payments mandate. This allows you to automatically collect payments via SEPA direct debit or credit card.
**Option A: Generate a mandate URL and redirect the customer:**
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts/{CONTACT_ID}/moneybird_payments_mandate/url.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
**Response:**
```json
{
"url": "https://moneybird.com/mandate/setup/abc123def456",
"expires_at": "2025-10-01T12:00:00Z"
}
```
Direct your customer to this URL to complete the mandate setup. The customer will make a small authorization payment.
**Option B: Send mandate request via email:**
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts/{CONTACT_ID}/moneybird_payments_mandate.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
This sends an email to the contact with instructions to set up the payment mandate.
**Monitor mandate setup completion:**
You can listen for the `contact_mandate_request_succeeded` webhook event to get notified when the customer successfully completes the mandate setup. See [Webhooks](/webhooks/getting-started) for setup instructions.
### 3. Create a Subscription
Create a subscription for the contact using a product with recurring billing:
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscriptions.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"subscription": {
"contact_id": "{CONTACT_ID}",
"product_id": "{PRODUCT_ID}",
"start_date": "2025-10-01",
"reference": "SUB-2025-001",
"workflow_id": "{WORKFLOW_ID}",
"frequency": "month",
"frequency_amount": 1
}
}'
```
**Key parameters:**
- `product_id`: Must be a product configured for recurring billing
- `start_date`: When the subscription starts (first invoice sent)
- `workflow_id`: Determines invoice settings and payment collection method
- `frequency`: Billing frequency (`day`, `week`, `month`, `quarter`, `year`)
- `frequency_amount`: Multiplier for frequency (e.g., 2 for every 2 months)
### 4. Add Usage-Based or Additional Charges
For services with variable usage (e.g., API calls, storage, additional seats), add charges that will be billed with the next subscription invoice:
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscriptions/{SUBSCRIPTION_ID}/additional_charges.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"product_id": "{USAGE_PRODUCT_ID}",
"amount": "150",
"price": "0.05",
"period": "2025-09-01..2025-09-30",
"description": "API Calls - September 2025"
}'
```
**Usage examples:**
- **API usage:** Track API calls and bill per call or batch
- **Storage charges:** Bill for additional storage used
- **Seat billing:** Charge for extra users added during the billing period
- **Support charges:** Bill for premium support hours used
### 5. Create One-Off Invoices
Sometimes you need to bill separate costs alongside the subscription (setup fees, consulting, etc.). Create and schedule these to be sent together with the subscription invoice:
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscriptions/{SUBSCRIPTION_ID}/create_and_schedule_one_off_sales_invoice.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"sales_invoice": {
"reference": "SETUP-2025-001",
"details_attributes": [
{
"description": "Initial Setup and Configuration",
"price": "500.00",
"amount": "1",
"tax_rate_id": "{TAX_RATE_ID}",
"ledger_account_id": "{LEDGER_ACCOUNT_ID}"
},
{
"description": "Data Migration Service",
"price": "750.00",
"amount": "1",
"tax_rate_id": "{TAX_RATE_ID}",
"ledger_account_id": "{LEDGER_ACCOUNT_ID}"
}
]
}
}'
```
This invoice will be automatically merged with and sent alongside the next subscription invoice.
### 6. Monitor and Manage Subscriptions
**Check subscription status:**
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscriptions/{SUBSCRIPTION_ID}.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
**List all subscriptions for a contact:**
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscriptions.json?contact_id={CONTACT_ID}" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
## Payment Collection with Workflows
When you create a subscription with a workflow that has Moneybird Payments and `Automatic direct debit` enabled, and the customer has accepted the mandate, invoices will be automatically paid via direct debit or credit card.
## Common Integration Patterns
### SaaS Billing
- Base subscription for platform access
- Additional charges for usage (API calls, storage, seats)
- One-off charges for setup or premium features
### Membership Services
- Monthly/yearly membership subscription
- Additional charges for events or premium content
- One-off charges for merchandise or special services
## Next Steps
After setting up subscriptions, you may want to:
1. Set up [webhooks](/webhooks/getting-started) to receive notifications about subscription events and payment status changes
2. Consider [hosted subscription management](/integration/hosted-subscription-management) for self-service subscription management via Moneybird's customer portal
---
## Document: Importing External Invoices
URL: /integration/importing-external-invoices
# Importing External Invoices
Import invoices from external software into Moneybird for complete revenue tracking and centralized bookkeeping.
## Overview
External sales invoices allow you to import invoices created in other systems (e-commerce platforms, marketplaces, accounting software) into Moneybird. This ensures all your revenue is tracked in one place for accurate financial reporting.
## Prerequisites
- You have an access token and your administration ID. See [Getting started](/integration/getting-started) and [Authentication](/authentication).
- You know the correct `ledger_account_id` and `tax_rate_id` for your revenue. See [Ledger accounts](/api/ledger-accounts) and [Tax rates](/api/tax-rates).
## Step-by-step
### 1. Create Contact
Before creating an external invoice, ensure you have a contact record.
Depending on your integration, you can link Moneybird contacts to your external application in several ways:
- Sync the Moneybird `contact_id` back to your application after creating a contact.
- Set the external contact ID as `customer_id` when creating the contact in Moneybird.
- Add custom fields to contacts in Moneybird (via the UI) and store the external contact ID there.
- If your application uses unique email addresses, you can also rely on those as a reference.
If there's already a contact stored in Moneybird you can skip this step.
Create a contact:
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"contact": {
"company_name": "TechStart Inc.",
"firstname": "John",
"lastname": "Smith",
"email": "john@techstart.com",
"customer_id": "ext_reference"
}
}'
```
### 2. Find existing Contact
- Depending on your integration you can retrieve the contact by [customer id](/api/contacts#get-contact-by-customer-id).
- An alternative method is querying by email:
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json?query=info%40moneybird.com" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
- If your integration relies on custom fields, you can use those too. First retrieve the [custom field ID](/api/custom-fields#list-all-custom-fields) and include it in your contact request. You can also obtain this ID by visiting custom fields in the UI and copying it from the URL.
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json?contact_field={CUSTOM_FIELD_ID}&contact_value={CUSTOM_FIELD_VALUE}" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
### 3. Create External Sales Invoice
Now create the external invoice using all necessary details. Setting the correct ledger account ID and tax rate ID from the beginning will make sure the invoice is booked correctly in your administration and matches your reporting. Setting a `source_url` enables you to easily visit the external sales invoice whenever that's needed.
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/external_sales_invoices.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"external_sales_invoice": {
"contact_id": "{CONTACT_ID}",
"reference": "EXT-INV-2025-001",
"date": "2025-09-16",
"due_date": "2025-10-16",
"currency": "EUR",
"source": "ecommerce_platform",
"source_url": "https://shop.example.com/orders/12345",
"details_attributes": [
{
"description": "Premium Software License",
"price": "299.00",
"amount": "1",
"tax_rate_id": "{TAX_RATE_ID}",
"ledger_account_id": "{LEDGER_ACCOUNT_ID}"
},
{
"description": "Setup Fee",
"price": "50.00",
"amount": "1",
"tax_rate_id": "{TAX_RATE_ID}",
"ledger_account_id": "{LEDGER_ACCOUNT_ID}"
}
]
}
}'
```
### 4. Upload Attachment
It's recommended to also [upload and attach](/api/external-sales-invoices#add-attachment-to-external-sales-invoice) the original (PDF) invoice from the external software. This document will be displayed in Moneybird as the source document, ensuring everything is stored and accessible in one place. Upload the document as binary data.
```bash
curl -X POST \
"https://moneybird.com/api/v2/{ADMINISTRATION_ID}/external_sales_invoices/{EXTERNAL_SALES_INVOICE_ID}/attachment.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-F "file=@invoice_document.pdf;type=application/pdf"
```
After importing external invoices, you may want to:
1. **Track payment status** with [webhooks](/webhooks/getting-started) for automatic reconciliation
2. Set up **[webhooks](/webhooks/getting-started)** for real-time updates
---
## Document: Hosted Subscription Management
URL: /integration/hosted-subscription-management
# Hosted Subscription Management
Enable self-service subscription management for your customers using Moneybird's hosted checkout and customer portal, allowing them to start subscriptions, change tiers, and manage billing independently.
## Overview
Hosted subscription management allows customers to manage their own subscriptions through Moneybird's customer portal. This approach is ideal when:
- You want to minimize subscription management complexity in your application
- You need customers to self-service subscription changes, upgrades, and billing
- You want Moneybird to handle the checkout flow and payment collection
This differs from [API-driven subscription management](/integration/managing-subscriptions) where all subscription operations are handled through your application.
## Prerequisites
- You have an access token and your administration ID. See [Getting started](/integration/getting-started) and [Authentication](/authentication).
- You have created subscription templates in Moneybird that define your subscription tiers and pricing.
- Moneybird Payments is enabled for automatic payment collection.
- You have configured workflows for your subscription billing.
## Step-by-step
### 1. Set Up Subscription Templates
First, create subscription templates in the UI that define your subscription tiers, pricing, and settings. These templates will be used for the hosted checkout experience.
**List existing subscription templates:**
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscription_templates.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
**Response:**
```json
[
{
"id": "465273141772421025",
"administration_id": 123,
"workflow_id": "465273141748303769",
"document_style_id": "465273141702166424",
"mergeable": false,
"contact_can_update": true,
"products": [
{
"id": "465273141767178144",
"administration_id": 123,
"description": "Premium Plan",
"title": "Premium",
"identifier": "premium-monthly",
"price": "29.99",
"currency": "EUR",
"frequency": 1,
"frequency_type": "month",
"tax_rate_id": "465273141755643806",
"ledger_account_id": "465273141762983839"
}
]
}
]
```
### 2. Create Hosted Checkout Links
Generate checkout links for customers to start subscriptions through Moneybird's hosted checkout flow.
**Option A: Contact-specific checkout link (unique URL):**
When you provide a `contact_id`, you get a unique checkout URL for that specific customer:
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscription_templates/{TEMPLATE_ID}/checkout_identifier.json?contact_id={CONTACT_ID}&start_date=2025-10-01" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
**Option B: General checkout link (reusable URL):**
Without a `contact_id`, you get a general checkout URL that can be reused for multiple customers:
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/subscription_templates/{TEMPLATE_ID}/checkout_identifier.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
This general URL can also be obtained directly through the Moneybird UI and used in website buttons, or email campaigns.
### 3. Redirect Customer to Hosted Checkout
Direct your customer to the generated checkout URL. The hosted checkout will:
- Allow the customer to review subscription details
- Collect payment information and set up automatic billing
- Create the subscription and payment mandate
- Redirect back to your application, if configured in your workflow.
### 4. Generate Customer Portal Links
After a subscription is created through hosted checkout, you can generate portal links for customers to manage their subscriptions.
**Generate link to specific subscription:**
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/customer_contact_portal/{CONTACT_ID}/subscriptions/{SUBSCRIPTION_ID}.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
All portal links expire after 1 hour for security reasons.
## Customer Portal Capabilities
When customers access the portal through your generated links, they can:
### Subscription Management
- View current subscription details and billing cycle
- Upgrade or downgrade between available tiers (if `contact_can_update` is enabled)
- Pause or cancel subscriptions
- Update billing information and payment methods
### Invoice Management
- View all past and current invoices
- Download invoice PDFs
- See payment status and due dates
- Access payment history
### Account Management
- Update contact information
- Manage payment mandates
- View upcoming charges and billing dates
## Webhooks Integration
Monitor subscription changes and customer actions through webhooks:
- `subscription_created`: When customer completes hosted checkout
- `subscription_updated`: When customer changes subscription tier
- `subscription_cancelled`: When customer cancels subscription
- `sales_invoice_created`: When subscription invoices are generated
See [Webhooks](/webhooks/getting-started) for setup instructions.
## Next Steps
After implementing hosted subscription management:
1. Set up [webhooks](/webhooks/getting-started) to monitor subscription lifecycle events
## Comparison with API Management
| Feature | Hosted Management | API Management |
|---------|------------------|----------------|
| **Setup Complexity** | Low - use templates | High - custom implementation |
| **Customer Experience** | Moneybird-hosted portal | Custom UI in your app |
| **Subscription Changes** | Self-service through portal | API calls from your app |
| **Payment Collection** | Automatic via Moneybird | Manual API integration |
| **Customization** | Limited to template options | Full control over UX |
| **Maintenance** | Managed by Moneybird | Your responsibility |
Choose hosted management for faster implementation and reduced complexity, or API management for maximum control and custom user experiences.
---
## Document: Getting started
URL: /integration/getting-started
# Getting started
Welcome to the Moneybird API integration guide. This guide helps you get started and covers some of the most common integration patterns.
## Before you begin
Make sure you have:
1. A Moneybird account and an administration to test with
2. An access token (or OAuth) and the administration ID
3. Basic REST knowledge (HTTP methods, headers, JSON)
See [Authentication](/authentication) if you need help obtaining an access token.
## Base URL and headers
Use your administration ID in the path and send your access token via the Authorization header.
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
Replace placeholders like `{ADMINISTRATION_ID}` and `{ACCESS_TOKEN}` with your values.
## Make your first request
Fetch a single contact to verify access:
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json?per_page=1" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
You should receive a 200 response with a JSON array (possibly empty if there are no contacts yet).
## What you can build next
- [Creating Sales Invoices](/integration/creating-sales-invoices): generate and send invoices
- [Importing External Invoices](/integration/importing-external-invoices): import invoices from other systems
- [Sending Invoices with Peppol](/integration/sending-sales-invoices-peppol): for B2B invoices
- [Managing Subscriptions](/integration/managing-subscriptions): set up recurring billing with full API control
- [Hosted Subscription Management](/integration/hosted-subscription-management): use Moneybird's hosted checkout and customer portal
Also consider setting up [Webhooks](/webhooks/getting-started) to react to status changes in real time.
---
## Document: Creating Sales Invoices
URL: /integration/creating-sales-invoices
# Creating Sales Invoices
Create and send professional sales invoices directly from your application when orders are placed in your system.
## Overview
Sales invoices are the primary billing documents you send to customers for products or services. This integration pattern is ideal when:
- You process payments elsewhere but want Moneybird to handle invoice generation
- You need to create invoices that will be paid later
- You want to maintain professional invoicing while managing orders in your own system
## Prerequisites
- You have an access token and your administration ID. See [Getting started](/integration/getting-started) and [Authentication](/authentication).
- You know the correct `ledger_account_id` and `tax_rate_id` for your revenue. See the API reference for [Ledger accounts](/api/ledger-accounts) and [Tax rates](/api/tax-rates).
## Step-by-step
### 1. Create or Find Contact
Before creating an invoice, ensure you have a contact record in Moneybird. You can either create a new contact or find an existing one.
**Create a new contact:**
When creating a contact, you can store your external system’s contact ID in the `customer_id` field. This makes it easy to look up the contact in Moneybird later using your own identifier.
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"contact": {
"company_name": "TechStart Inc.",
"firstname": "John",
"lastname": "Smith",
"address1": "123 Business St",
"zipcode": "1234 AB",
"city": "Amsterdam",
"country": "NL",
"email": "john@techstart.com",
"customer_id": "external_id_12345"
}
}'
```
**Find existing contact by external customer ID:**
```bash
curl -X GET "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/contacts/customer_id/external_id_12345.json" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
```
### 2. Create Sales Invoice
Create a sales invoice with all necessary details. Make sure to set the correct ledger account and tax rate IDs to ensure proper bookkeeping.
```bash
curl -X POST "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/sales_invoices.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"sales_invoice": {
"contact_id": "{CONTACT_ID}",
"reference": "INV-2025-001",
"invoice_date": "2025-09-16",
"due_date": "2025-10-16",
"currency": "EUR",
"details_attributes": [
{
"description": "Premium Software License",
"price": "299.00",
"amount": "1",
"tax_rate_id": "{TAX_RATE_ID}",
"ledger_account_id": "{LEDGER_ACCOUNT_ID}"
},
{
"description": "Setup Fee",
"price": "50.00",
"amount": "1",
"tax_rate_id": "{TAX_RATE_ID}",
"ledger_account_id": "{LEDGER_ACCOUNT_ID}"
}
]
}
}'
```
### 3. Send Invoice to Customer
Once the invoice is created, [send the invoice](/api/sales-invoices#sends-an-invoice) to your customer via email or other delivery methods like [Peppol](/integration/sending-sales-invoices-peppol). Sending the invoice automatically updates it from `draft` to `open`.
You can also schedule the invoice to be sent later, or use custom delivery methods.
```bash
curl -X PATCH "https://moneybird.com/api/v2/{ADMINISTRATION_ID}/sales_invoices/{SALES_INVOICE_ID}/send_invoice.json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
"sales_invoice_sending": {
"delivery_method": "Email",
"deliver_ubl": true,
"email_address": "john@techstart.com",
"email_message": "Dear John, please find your invoice attached. Thank you for your business!"
}
}'
```
After sending, the invoice status changes from `draft` to `open`. Track payment status with [Webhooks](/webhooks/getting-started) or retrieve through the API.
## Next Steps
After creating and sending sales invoices, you may want to:
1. Track payment status with [Webhooks](/webhooks/getting-started) or retrieve through the API for reconciliation when payments are received
2. Set up [webhooks](/webhooks/getting-started) for real-time notifications about payment status changes
---
## Document: 2026-07-10
URL: /changelog/2026-07-10
# 2026-07-10
## API Changelog v2-20260709-ff4d7787a1 vs. v2-20260710-0a3a54574c
### `GET /{administration_id}/documents/general_documents{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/documents/general_journal_documents{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/documents/purchase_invoices{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/documents/receipts{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/documents/typeless_documents{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/external_sales_invoices/synchronization{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/financial_mutations/synchronization{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/financial_mutations{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/projects{format}`
- :warning: for the `query` request parameter `filter`, default value `state:active` was added
---
## Document: 2026-07-09
URL: /changelog/2026-07-09
# 2026-07-09
## API Changelog v2-20260708-b94d751552 vs. v2-20260709-ff4d7787a1
### `PATCH /{administration_id}/time_entries/{id}/resume{format}`
- added the non-success response with the status `422`
- removed the non-success response with the status `400`
---
## Document: 2026-07-08
URL: /changelog/2026-07-08
# 2026-07-08
## API Changelog v2-20260708-8e4dcfc97c vs. v2-20260708-b94d751552
### `PATCH /{administration_id}/financial_mutations/{id}/link_booking{format}`
- :warning: request property `booking_type` was restricted to a list of enum values
- added the new `Document` enum value to the request property `booking_type`
- added the new `ExternalSalesInvoice` enum value to the request property `booking_type`
- added the new `LedgerAccount` enum value to the request property `booking_type`
- added the new `NewPurchaseInvoice` enum value to the request property `booking_type`
- added the new `NewReceipt` enum value to the request property `booking_type`
- added the new `Payment` enum value to the request property `booking_type`
- added the new `PaymentTransaction` enum value to the request property `booking_type`
- added the new `PaymentTransactionBatch` enum value to the request property `booking_type`
- added the new `PurchaseTransaction` enum value to the request property `booking_type`
- added the new `PurchaseTransactionBatch` enum value to the request property `booking_type`
- added the new `SalesInvoice` enum value to the request property `booking_type`
- added the new `VatDocument` enum value to the request property `booking_type`
---
## Document: 2026-07-02
URL: /changelog/2026-07-02
# 2026-07-02
## API Changelog v2-20260701-9ea3742039 vs. v2-20260702-b39f5b8273
### `PATCH /{administration_id}/documents/general_documents/{id}{format}`
- :warning: the `general_document/date` request property `format` changed from `none` to `date`
- :warning: the `general_document/due_date` request property `format` changed from `none` to `date`
- :warning: the `general_document/reminder/date` request property `format` changed from `none` to `date`
- :warning: the `general_document/reminder_date` request property `format` changed from `none` to `date`
### `POST /{administration_id}/documents/general_documents{format}`
- :warning: the `general_document/date` request property `format` changed from `none` to `date`
- :warning: the `general_document/due_date` request property `format` changed from `none` to `date`
- :warning: the `general_document/reminder/date` request property `format` changed from `none` to `date`
- :warning: the `general_document/reminder_date` request property `format` changed from `none` to `date`
### `POST /{administration_id}/documents/general_journal_documents{format}`
- :warning: the `general_journal_document/date` request property `format` changed from `none` to `date`
### `POST /{administration_id}/documents/typeless_documents{format}`
- :warning: the `typeless_document/date` request property `format` changed from `none` to `date`
### `PATCH /{administration_id}/estimates/{id}/send_estimate{format}`
- :warning: request property `estimate_sending/delivery_method` was restricted to a list of enum values
- added the new `Email` enum value to the request property `estimate_sending/delivery_method`
- added the new `Manual` enum value to the request property `estimate_sending/delivery_method`
### `PATCH /{administration_id}/identities/default{format}`
- :warning: request property `identity/administration_attributes/legal_entity_type` was restricted to a list of enum values
- :warning: request property `identity/legal_entity_type` was restricted to a list of enum values
- :warning: removed the request property `identity/administration_attributes/adyen_processed_funds`
- :warning: removed the request property `identity/administration_attributes/company_activities_description`
- :warning: removed the request property `identity/administration_attributes/company_website_absent`
- :warning: removed the request property `identity/administration_attributes/company_website_url`
- added the new `bv` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `bv` enum value to the request property `identity/legal_entity_type`
- added the new `coöperatie` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `coöperatie` enum value to the request property `identity/legal_entity_type`
- added the new `cv` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `cv` enum value to the request property `identity/legal_entity_type`
- added the new `eenmanszaak` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `eenmanszaak` enum value to the request property `identity/legal_entity_type`
- added the new `geen_kvk_inschrijving` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `geen_kvk_inschrijving` enum value to the request property `identity/legal_entity_type`
- added the new `maatschap` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `maatschap` enum value to the request property `identity/legal_entity_type`
- added the new `nv` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `nv` enum value to the request property `identity/legal_entity_type`
- added the new `stichting` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `stichting` enum value to the request property `identity/legal_entity_type`
- added the new `vereniging` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `vereniging` enum value to the request property `identity/legal_entity_type`
- added the new `vof` enum value to the request property `identity/administration_attributes/legal_entity_type`
- added the new `vof` enum value to the request property `identity/legal_entity_type`
### `PATCH /{administration_id}/ledger_accounts/{id}{format}`
- :warning: request property `ledger_account/account_type` was restricted to a list of enum values
- added the new `current_assets` enum value to the request property `ledger_account/account_type`
- added the new `current_liabilities` enum value to the request property `ledger_account/account_type`
- added the new `direct_costs` enum value to the request property `ledger_account/account_type`
- added the new `equity` enum value to the request property `ledger_account/account_type`
- added the new `expenses` enum value to the request property `ledger_account/account_type`
- added the new `non_current_assets` enum value to the request property `ledger_account/account_type`
- added the new `non_current_liabilities` enum value to the request property `ledger_account/account_type`
- added the new `other_income_expenses` enum value to the request property `ledger_account/account_type`
- added the new `provisions` enum value to the request property `ledger_account/account_type`
- added the new `revenue` enum value to the request property `ledger_account/account_type`
### `POST /{administration_id}/ledger_accounts{format}`
- :warning: request property `ledger_account/account_type` was restricted to a list of enum values
- added the new `current_assets` enum value to the request property `ledger_account/account_type`
- added the new `current_liabilities` enum value to the request property `ledger_account/account_type`
- added the new `direct_costs` enum value to the request property `ledger_account/account_type`
- added the new `equity` enum value to the request property `ledger_account/account_type`
- added the new `expenses` enum value to the request property `ledger_account/account_type`
- added the new `non_current_assets` enum value to the request property `ledger_account/account_type`
- added the new `non_current_liabilities` enum value to the request property `ledger_account/account_type`
- added the new `other_income_expenses` enum value to the request property `ledger_account/account_type`
- added the new `provisions` enum value to the request property `ledger_account/account_type`
- added the new `revenue` enum value to the request property `ledger_account/account_type`
### `POST /{administration_id}/sales_invoices/send_reminders{format}`
- :warning: request property `sales_invoice_reminders/items/delivery_method` was restricted to a list of enum values
- added the new `Email` enum value to the request property `sales_invoice_reminders/items/delivery_method`
- added the new `Manual` enum value to the request property `sales_invoice_reminders/items/delivery_method`
### `PATCH /{administration_id}/sales_invoices/{id}/send_invoice{format}`
- :warning: request property `sales_invoice_sending/delivery_method` was restricted to a list of enum values
- :warning: the `sales_invoice_sending/invoice_date` request property `format` changed from `none` to `date`
- the `mergeable` request property default value `false` was added
- the `sending_scheduled` request property default value `false` was added
- added the new `Email` enum value to the request property `sales_invoice_sending/delivery_method`
- added the new `Manual` enum value to the request property `sales_invoice_sending/delivery_method`
- added the new `Peppol` enum value to the request property `sales_invoice_sending/delivery_method`
### `PATCH /{administration_id}/subscriptions/{id}{format}`
- the `mergeable` request property default value `false` was added
- the `prices_are_incl_tax` request property default value `false` was added
### `POST /{administration_id}/subscriptions{format}`
- :warning: request property `subscription/frequency_type` was restricted to a list of enum values
- the `mergeable` request property default value `false` was added
- the `prices_are_incl_tax` request property default value `false` was added
- added the new `day` enum value to the request property `subscription/frequency_type`
- added the new `month` enum value to the request property `subscription/frequency_type`
- added the new `quarter` enum value to the request property `subscription/frequency_type`
- added the new `week` enum value to the request property `subscription/frequency_type`
- added the new `year` enum value to the request property `subscription/frequency_type`
### `PATCH /{administration_id}/task_list_groups/{id}{format}`
- :warning: request property `group/report_type` was restricted to a list of enum values
- added the new `assets` enum value to the request property `group/report_type`
- added the new `balance_sheet` enum value to the request property `group/report_type`
- added the new `creditor` enum value to the request property `group/report_type`
- added the new `debtor` enum value to the request property `group/report_type`
- added the new `profit_loss` enum value to the request property `group/report_type`
### `POST /{administration_id}/task_list_groups/{task_list_group_id}/tasks{format}`
- :warning: request property `task/report_type` was restricted to a list of enum values
- added the new `assets` enum value to the request property `task/report_type`
- added the new `balance_sheet` enum value to the request property `task/report_type`
- added the new `creditor` enum value to the request property `task/report_type`
- added the new `debtor` enum value to the request property `task/report_type`
- added the new `profit_loss` enum value to the request property `task/report_type`
### `PATCH /{administration_id}/task_list_tasks/{id}{format}`
- :warning: request property `task/report_type` was restricted to a list of enum values
- added the new `assets` enum value to the request property `task/report_type`
- added the new `balance_sheet` enum value to the request property `task/report_type`
- added the new `creditor` enum value to the request property `task/report_type`
- added the new `debtor` enum value to the request property `task/report_type`
- added the new `profit_loss` enum value to the request property `task/report_type`
### `POST /{administration_id}/task_list_templates/{task_list_template_id}/groups{format}`
- :warning: request property `group/report_type` was restricted to a list of enum values
- added the new `assets` enum value to the request property `group/report_type`
- added the new `balance_sheet` enum value to the request property `group/report_type`
- added the new `creditor` enum value to the request property `group/report_type`
- added the new `debtor` enum value to the request property `group/report_type`
- added the new `profit_loss` enum value to the request property `group/report_type`
### `POST /{administration_id}/task_lists/{task_list_id}/groups{format}`
- :warning: request property `group/report_type` was restricted to a list of enum values
- added the new `assets` enum value to the request property `group/report_type`
- added the new `balance_sheet` enum value to the request property `group/report_type`
- added the new `creditor` enum value to the request property `group/report_type`
- added the new `debtor` enum value to the request property `group/report_type`
- added the new `profit_loss` enum value to the request property `group/report_type`
---
## Document: 2026-06-25
URL: /changelog/2026-06-25
# 2026-06-25
## API Changelog v2-20260624-22e301da8b vs. v2-20260625-5dce476d1b
### `GET /{administration_id}/estimates{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/external_sales_invoices{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/purchase_transactions{format}`
- :warning: for the `query` request parameter `filter`, default value `unbatched:true` was added
### `GET /{administration_id}/recurring_sales_invoices{format}`
- :warning: for the `query` request parameter `filter`, default value `state:active` was added
### `GET /{administration_id}/sales_invoices{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
### `GET /{administration_id}/time_entries{format}`
- :warning: for the `query` request parameter `filter`, default value `period:this_year` was added
---
## Document: 2026-06-17
URL: /changelog/2026-06-17
# 2026-06-17
## API Changelog v2-20260616-f41c60f148 vs. v2-20260617-f0de476af4
### `GET /{administration_id}/contacts/customer_id/{customer_id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/contacts/filter{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/contacts/synchronization{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/contacts/synchronization{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `PATCH /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/contacts/{contact_id}/contact_people{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/contacts/{contact_id}/notes/{id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/contacts/{contact_id}/notes{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `PATCH /{administration_id}/contacts/{id}/archive{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/contacts/{id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/contacts/{id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `PATCH /{administration_id}/contacts/{id}{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/contacts{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/contacts{format}`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/custom_fields{format}`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/document_styles{format}`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/external_sales_invoices{format}`
- added the non-success response with the status `422`
### `GET /{administration_id}/ledger_accounts/{id}{format}`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/reports/debtors_aging{format}`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was removed from the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/reports/debtors{format}`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was removed from the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/reports/export/auditfile{format}`
- the security scope `contacts` was removed from the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/task_list_groups/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/task_list_groups/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `PATCH /{administration_id}/task_list_groups/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_list_groups/{task_list_group_id}/tasks{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/task_list_tasks/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/task_list_tasks/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `PATCH /{administration_id}/task_list_tasks/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/task_list_tasks/{task_list_task_id}/assignment{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/assignment{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/task_list_tasks/{task_list_task_id}/completion{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/completion{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/notes{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/task_list_templates/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/task_list_templates/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `PATCH /{administration_id}/task_list_templates/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_list_templates/{task_list_template_id}/groups{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_list_templates/{task_list_template_id}/task_lists{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/task_list_templates{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_list_templates{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `DELETE /{administration_id}/task_lists/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/task_lists/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `PATCH /{administration_id}/task_lists/{id}{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_lists/{task_list_id}/groups{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/task_lists{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `POST /{administration_id}/task_lists{format}`
- the security scope `bank` was added to the endpoint's security scheme `bearerAuth`
- the security scope `documents` was added to the endpoint's security scheme `bearerAuth`
- the security scope `estimates` was added to the endpoint's security scheme `bearerAuth`
- the security scope `sales_invoices` was added to the endpoint's security scheme `bearerAuth`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
- the security scope `time_entries` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/tax_rates{format}`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/workflows/{id}{format}`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
### `GET /{administration_id}/workflows{format}`
- the security scope `settings` was added to the endpoint's security scheme `bearerAuth`
---
## Document: 2026-06-15
URL: /changelog/2026-06-15
# 2026-06-15
## API Changelog v2-20260612-01589a4a68 vs. v2-20260615-07af70faeb
### `GET /{administration_id}/contacts/filter{format}`
- added the new optional `query` request parameter `query`
### `GET /{administration_id}/contacts{format}`
- added the new optional `query` request parameter `contact_import_id`
### `GET /{administration_id}/documents/general_documents{format}`
- :warning: deleted the `query` request parameter `exclude_new_general_journal_documents`
### `GET /{administration_id}/documents/purchase_invoices{format}`
- :warning: deleted the `query` request parameter `exclude_new_general_journal_documents`
### `GET /{administration_id}/documents/receipts{format}`
- :warning: deleted the `query` request parameter `exclude_new_general_journal_documents`
### `GET /{administration_id}/documents/typeless_documents{format}`
- :warning: deleted the `query` request parameter `exclude_new_general_journal_documents`
### `GET /{administration_id}/products{format}`
- added the new optional `query` request parameter `active`
- added the new optional `query` request parameter `for_checkout`
- added the new optional `query` request parameter `ledger_account_id`
### `Components`
- removed the schema `goal_response`
- removed the schema `period_response`
- removed the schema `subgoal_response`
---
## Document: 2026-06-11
URL: /changelog/2026-06-11
# 2026-06-11
## API Changelog v2-20260611-30f74082fd vs. v2-20260611-1130a801af
### `GET /administrations{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/disposals{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/assets/{id}/reinvestment_reserve_purchase{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/reinvestment_reserve_purchase{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/assets/{id}/reinvestment_reserve_sale{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/reinvestment_reserve_sale{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/assets/{id}/sources/{source_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/sources{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/value_changes/arbitrary{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/value_changes/divestment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/value_changes/full_depreciation{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/value_changes/manual{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets/{id}/value_changes/retroactive_linear_value_changes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/assets/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/assets/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/assets/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/assets{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/assets{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts/customer_id/{customer_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts/filter{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/contacts/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/contacts/{contact_id}/contact_people{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate/url{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/contacts/{contact_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/contacts/{contact_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts/{id}/additional_charges{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/contacts/{id}/additional_charges{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/contacts/{id}/archive{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/contacts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/contacts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/contacts{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/contacts{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/custom_fields{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/customer_contact_portal/{contact_id}/invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/customer_contact_portal/{contact_id}/subscriptions/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/customer_contact_portal/{contact_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/document_styles{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_documents/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_documents/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/general_documents/{general_document_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_documents/{general_document_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_documents/{id}/attachments/{attachment_id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/general_documents/{id}/attachments/{attachment_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_documents/{id}/attachments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/general_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/documents/general_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_documents{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_documents{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_journal_documents/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_journal_documents/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/general_journal_documents/{general_journal_document_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_journal_documents/{general_journal_document_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_journal_documents/{id}/attachments/{attachment_id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/general_journal_documents/{id}/attachments/{attachment_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_journal_documents/{id}/attachments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/general_journal_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_journal_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/documents/general_journal_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/general_journal_documents{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/general_journal_documents{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/purchase_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/purchase_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/purchase_invoices/{id}/attachments/{attachment_id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/purchase_invoices/{id}/attachments/{attachment_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/purchase_invoices/{id}/attachments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/purchase_invoices/{id}/payments/{payment_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/purchase_invoices/{id}/payments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/documents/purchase_invoices/{id}/register_payment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/purchase_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/purchase_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/documents/purchase_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/purchase_invoices/{purchase_invoice_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/purchase_invoices/{purchase_invoice_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/purchase_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/purchase_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/receipts/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/receipts/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/receipts/{id}/attachments/{attachment_id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/receipts/{id}/attachments/{attachment_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/receipts/{id}/attachments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/receipts/{id}/payments/{payment_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/receipts/{id}/payments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/documents/receipts/{id}/register_payment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/receipts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/receipts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/documents/receipts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/receipts/{receipt_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/receipts/{receipt_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/receipts{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/receipts{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/typeless_documents/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/typeless_documents/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/typeless_documents/{id}/attachments/{attachment_id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/typeless_documents/{id}/attachments/{attachment_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/typeless_documents/{id}/attachments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/documents/typeless_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/typeless_documents/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/documents/typeless_documents{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/documents/typeless_documents{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/downloads/{id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/downloads{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/estimates/find_by_estimate_id/{estimate_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/estimates/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/estimates/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/estimates/{estimate_id}/attachments/{id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/estimates/{estimate_id}/attachments/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/estimates/{estimate_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/estimates/{estimate_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/estimates/{id}/attachments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/estimates/{id}/bill_estimate{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/estimates/{id}/change_state{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/estimates/{id}/download_pdf{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/estimates/{id}/send_estimate{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/estimates/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/estimates/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/estimates/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/estimates{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/estimates{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/external_sales_invoices/attachment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/external_sales_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/external_sales_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/attachments/{id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/attachments/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/payments/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/payments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/external_sales_invoices/{id}/attachment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/external_sales_invoices/{id}/mark_as_dubious{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/external_sales_invoices/{id}/mark_as_uncollectible{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/external_sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/external_sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/external_sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/external_sales_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/external_sales_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/financial_accounts{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/financial_mutations/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/financial_mutations/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/financial_mutations/{id}/link_booking{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/financial_mutations/{id}/unlink_booking{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/financial_mutations/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/financial_mutations{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/financial_statements/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/financial_statements/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/financial_statements{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/identities/default{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/identities/default{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/identities/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/identities/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/identities/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/identities{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/identities{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/ledger_accounts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/ledger_accounts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/ledger_accounts/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/ledger_accounts{format}`
- the endpoint scheme security `bearerAuth` was added to the API
- the endpoint scheme security `bearerAuth` was added to the API
- the endpoint scheme security `bearerAuth` was added to the API
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/ledger_accounts{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/payments/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/products/identifier/{identifier}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/products/{id}/sales_link{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/products/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/products/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/products/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/products{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/products{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/projects/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/projects/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/projects/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/projects{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/projects{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/purchase_transactions/{id}/delete{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/purchase_transactions/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/purchase_transactions/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/purchase_transactions{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/recurring_sales_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/recurring_sales_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/recurring_sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/recurring_sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/recurring_sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/recurring_sales_invoices/{recurring_sales_invoice_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/recurring_sales_invoices/{recurring_sales_invoice_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/recurring_sales_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/recurring_sales_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/find_by_invoice_id/{invoice_id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/find_by_reference/{reference}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices/send_reminders{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices/synchronization{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices/{id}/attachments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/{id}/download_packing_slip_pdf{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/{id}/download_pdf{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/{id}/download_ubl{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/sales_invoices/{id}/duplicate_creditinvoice{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/sales_invoices/{id}/mark_as_dubious{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/sales_invoices/{id}/mark_as_uncollectible{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices/{id}/pause{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/sales_invoices/{id}/register_payment_creditinvoice{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/sales_invoices/{id}/register_payment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices/{id}/resume{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/sales_invoices/{id}/send_invoice{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/sales_invoices/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices/{sales_invoice_id}/attachments/{id}/download{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/sales_invoices/{sales_invoice_id}/attachments/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/sales_invoices/{sales_invoice_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices/{sales_invoice_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/sales_invoices/{sales_invoice_id}/payments/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices/{sales_invoice_id}/payments{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/sales_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sales_invoices{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/sepa_credit_transfer{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/subscription_templates/{id}/checkout_identifier{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/subscription_templates/{id}/sales_link{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/subscription_templates{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/subscriptions/{id}/additional_charges{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/subscriptions/{id}/additional_charges{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/subscriptions/{id}/create_and_schedule_one_off_sales_invoice{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/subscriptions/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/subscriptions/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/subscriptions/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/subscriptions{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/subscriptions{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/task_list_groups/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/task_list_groups/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/task_list_groups/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_list_groups/{task_list_group_id}/tasks{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/task_list_tasks/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/task_list_tasks/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/task_list_tasks/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/task_list_tasks/{task_list_task_id}/assignment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/assignment{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/task_list_tasks/{task_list_task_id}/completion{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/completion{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/task_list_templates/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/task_list_templates/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/task_list_templates/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_list_templates/{task_list_template_id}/groups{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_list_templates/{task_list_template_id}/task_lists{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/task_list_templates{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_list_templates{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/task_lists/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/task_lists/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/task_lists/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_lists/{task_list_id}/groups{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/task_lists{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/task_lists{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/tax_rates{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/time_entries/{id}/resume{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/time_entries/{id}/stop{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/time_entries/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/time_entries/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/time_entries/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/time_entries/{time_entry_id}/notes/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/time_entries/{time_entry_id}/notes{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/time_entries{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/time_entries{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/users{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/verifications{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/webhooks/{id}/activate{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `PATCH /{administration_id}/webhooks/{id}/deactivate{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `DELETE /{administration_id}/webhooks/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/webhooks{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `POST /{administration_id}/webhooks{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/workflows/{id}{format}`
- the endpoint scheme security `bearerAuth` was added to the API
### `GET /{administration_id}/workflows{format}`
- the endpoint scheme security `bearerAuth` was added to the API
---
## Document: 2026-06-05
URL: /changelog/2026-06-05
# 2026-06-05
## API Changelog v2-20260604-57d8654846 vs. v2-20260605-edb228567b
### `POST /{administration_id}/assets/{id}/disposals{format}`
- added the optional property `reinvestment_reserve_sale` to the response with the `201` status
### `DELETE /{administration_id}/assets/{id}/reinvestment_reserve_purchase{format}`
- endpoint added
### `POST /{administration_id}/assets/{id}/reinvestment_reserve_purchase{format}`
- endpoint added
### `DELETE /{administration_id}/assets/{id}/reinvestment_reserve_sale{format}`
- endpoint added
### `POST /{administration_id}/assets/{id}/reinvestment_reserve_sale{format}`
- endpoint added
### `GET /{administration_id}/assets/{id}{format}`
- added the optional property `disposal/oneOf[#/components/schemas/disposal_response]/reinvestment_reserve_sale` to the response with the `200` status
- added the optional property `reinvestment_reserve_purchase` to the response with the `200` status
### `PATCH /{administration_id}/assets/{id}{format}`
- added the optional property `disposal/oneOf[#/components/schemas/disposal_response]/reinvestment_reserve_sale` to the response with the `200` status
- added the optional property `reinvestment_reserve_purchase` to the response with the `200` status
### `GET /{administration_id}/assets{format}`
- added the optional property `items/disposal/oneOf[#/components/schemas/disposal_response]/reinvestment_reserve_sale` to the response with the `200` status
- added the optional property `items/reinvestment_reserve_purchase` to the response with the `200` status
### `POST /{administration_id}/assets{format}`
- added the optional property `disposal/oneOf[#/components/schemas/disposal_response]/reinvestment_reserve_sale` to the response with the `201` status
- added the optional property `reinvestment_reserve_purchase` to the response with the `201` status
---
## Document: 2026-06-03
URL: /changelog/2026-06-03
# 2026-06-03
## API Changelog v2-20260603-bf28aa7a10 vs. v2-20260603-86107e0703
### `GET /{administration_id}/assets/{id}{format}`
- added the optional property `calculated_purchase_value` to the response with the `200` status
### `PATCH /{administration_id}/assets/{id}{format}`
- added the optional property `calculated_purchase_value` to the response with the `200` status
### `GET /{administration_id}/assets{format}`
- added the optional property `items/calculated_purchase_value` to the response with the `200` status
### `POST /{administration_id}/assets{format}`
- added the optional property `calculated_purchase_value` to the response with the `201` status
---
## Document: 2026-06-02
URL: /changelog/2026-06-02
# 2026-06-02
## API Changelog v2-20260601-52e5f40b8c vs. v2-20260602-9a00fffbef
### `DELETE /{administration_id}/assets/{id}/sources/{detail_id}{format}`
- api operation id `delete_administration_id_assets_id_sources_detail_id` removed and replaced with `delete_administration_id_assets_id_sources_source_id`
### `POST /{administration_id}/assets/{id}/sources{format}`
- :warning: removed the request property `detail_id`
- added `subschema #1, subschema #2` to the request body `oneOf` list
- added the optional property `general_journal_document_entry_id` to the response with the `201` status
### `GET /{administration_id}/assets/{id}{format}`
- added the optional property `sources/items/general_journal_document_entry_id` to the response with the `200` status
### `PATCH /{administration_id}/assets/{id}{format}`
- added the optional property `sources/items/general_journal_document_entry_id` to the response with the `200` status
### `GET /{administration_id}/assets{format}`
- added the optional property `items/sources/items/general_journal_document_entry_id` to the response with the `200` status
### `POST /{administration_id}/assets{format}`
- added the optional property `sources/items/general_journal_document_entry_id` to the response with the `201` status
## API Changelog v2-20260602-b21bd9f0d9 vs. v2-20260602-14cd5a1579
### `PATCH /{administration_id}/webhooks/{id}/activate{format}`
- added the optional property `secret` to the response with the `200` status
### `PATCH /{administration_id}/webhooks/{id}/deactivate{format}`
- added the optional property `secret` to the response with the `200` status
### `GET /{administration_id}/webhooks{format}`
- added the optional property `items/secret` to the response with the `200` status
### `POST /{administration_id}/webhooks{format}`
- added the optional property `secret` to the response with the `201` status
---
## Document: 2026-04-29
URL: /changelog/2026-04-29
# 2026-04-29
## API Changelog v2-20260429-7e0b330bb1 vs. v2-20260429-7c3c073269
### `POST /{administration_id}/documents/purchase_invoices/synchronization{format}`
- added the optional property `items/fiscal_allocations` to the response with the `200` status
### `GET /{administration_id}/documents/purchase_invoices/{id}{format}`
- added the optional property `fiscal_allocations` to the response with the `200` status
### `PATCH /{administration_id}/documents/purchase_invoices/{id}{format}`
- added the new optional request property `purchase_invoice/fiscal_allocations_attributes`
- added the optional property `fiscal_allocations` to the response with the `200` status
### `GET /{administration_id}/documents/purchase_invoices{format}`
- added the optional property `items/fiscal_allocations` to the response with the `200` status
### `POST /{administration_id}/documents/purchase_invoices{format}`
- added the new optional request property `purchase_invoice/fiscal_allocations_attributes`
- added the optional property `fiscal_allocations` to the response with the `201` status
### `POST /{administration_id}/documents/receipts/synchronization{format}`
- added the optional property `items/fiscal_allocations` to the response with the `200` status
### `GET /{administration_id}/documents/receipts/{id}{format}`
- added the optional property `fiscal_allocations` to the response with the `200` status
### `PATCH /{administration_id}/documents/receipts/{id}{format}`
- added the new optional request property `receipt/fiscal_allocations_attributes`
- added the optional property `fiscal_allocations` to the response with the `200` status
### `GET /{administration_id}/documents/receipts{format}`
- added the optional property `items/fiscal_allocations` to the response with the `200` status
### `POST /{administration_id}/documents/receipts{format}`
- added the new optional request property `receipt/fiscal_allocations_attributes`
- added the optional property `fiscal_allocations` to the response with the `201` status
---
## Document: 2026-04-13
URL: /changelog/2026-04-13
# 2026-04-13
## API Changelog v2-20260410-f732e420ae vs. v2-20260413-3216af3db5
### `PATCH /{administration_id}/contacts/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `contact/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `contact/custom_fields_attributes` request property `oneOf` list
### `POST /{administration_id}/contacts{format}`
- :warning: removed `subschema #1, subschema #2` from the `contact/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `contact/custom_fields_attributes` request property `oneOf` list
### `PATCH /{administration_id}/documents/general_journal_documents/{id}{format}`
- :warning: removed the request property `general_journal_document/origin`
### `POST /{administration_id}/documents/general_journal_documents{format}`
- :warning: removed the request property `general_journal_document/origin`
### `PATCH /{administration_id}/documents/purchase_invoices/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `purchase_invoice/details_attributes` request property `oneOf` list
- :warning: the `purchase_invoice/date` request property type/format changed from `string`/`` to `string`/`date`
- :warning: the `purchase_invoice/due_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `purchase_invoice/details_attributes` request property `oneOf` list
### `POST /{administration_id}/documents/purchase_invoices{format}`
- :warning: removed `subschema #1, subschema #2` from the `purchase_invoice/details_attributes` request property `oneOf` list
- :warning: the `purchase_invoice/date` request property type/format changed from `string`/`` to `string`/`date`
- :warning: the `purchase_invoice/due_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `purchase_invoice/details_attributes` request property `oneOf` list
### `PATCH /{administration_id}/documents/receipts/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `receipt/details_attributes` request property `oneOf` list
- :warning: the `receipt/date` request property type/format changed from `string`/`` to `string`/`date`
- :warning: removed the request property `receipt/origin`
- added `subschema #1, subschema #2` to the `receipt/details_attributes` request property `oneOf` list
### `POST /{administration_id}/documents/receipts{format}`
- :warning: removed `subschema #1, subschema #2` from the `receipt/details_attributes` request property `oneOf` list
- :warning: the `receipt/date` request property type/format changed from `string`/`` to `string`/`date`
- :warning: removed the request property `receipt/origin`
- added `subschema #1, subschema #2` to the `receipt/details_attributes` request property `oneOf` list
### `PATCH /{administration_id}/estimates/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `estimate/custom_fields_attributes` request property `oneOf` list
- :warning: removed `subschema #1, subschema #2` from the `estimate/details_attributes` request property `oneOf` list
- :warning: the `estimate/estimate_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `estimate/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `estimate/details_attributes` request property `oneOf` list
### `POST /{administration_id}/estimates{format}`
- :warning: removed `subschema #1, subschema #2` from the `estimate/custom_fields_attributes` request property `oneOf` list
- :warning: removed `subschema #1, subschema #2` from the `estimate/details_attributes` request property `oneOf` list
- :warning: the `estimate/estimate_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `estimate/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `estimate/details_attributes` request property `oneOf` list
### `PATCH /{administration_id}/external_sales_invoices/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `external_sales_invoice/details_attributes` request property `oneOf` list
- :warning: the `external_sales_invoice/date` request property type/format changed from `string`/`` to `string`/`date`
- :warning: the `external_sales_invoice/due_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `external_sales_invoice/details_attributes` request property `oneOf` list
### `POST /{administration_id}/external_sales_invoices{format}`
- :warning: removed `subschema #1, subschema #2` from the `external_sales_invoice/details_attributes` request property `oneOf` list
- :warning: the `external_sales_invoice/date` request property type/format changed from `string`/`` to `string`/`date`
- :warning: the `external_sales_invoice/due_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `external_sales_invoice/details_attributes` request property `oneOf` list
### `PATCH /{administration_id}/financial_statements/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `financial_statement/financial_mutations_attributes` request property `oneOf` list
- :warning: the `financial_statement/official_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `financial_statement/financial_mutations_attributes` request property `oneOf` list
### `POST /{administration_id}/financial_statements{format}`
- :warning: removed `subschema #1, subschema #2` from the `financial_statement/financial_mutations_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `financial_statement/financial_mutations_attributes` request property `oneOf` list
### `PATCH /{administration_id}/identities/default{format}`
- :warning: removed `subschema #1, subschema #2` from the `identity/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `identity/custom_fields_attributes` request property `oneOf` list
### `PATCH /{administration_id}/identities/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `identity/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `identity/custom_fields_attributes` request property `oneOf` list
### `POST /{administration_id}/identities{format}`
- :warning: removed `subschema #1, subschema #2` from the `identity/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `identity/custom_fields_attributes` request property `oneOf` list
### `PATCH /{administration_id}/recurring_sales_invoices/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `recurring_sales_invoice/custom_fields_attributes` request property `oneOf` list
- :warning: removed `subschema #1, subschema #2` from the `recurring_sales_invoice/details_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `recurring_sales_invoice/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `recurring_sales_invoice/details_attributes` request property `oneOf` list
### `POST /{administration_id}/recurring_sales_invoices{format}`
- :warning: removed `subschema #1, subschema #2` from the `recurring_sales_invoice/custom_fields_attributes` request property `oneOf` list
- :warning: removed `subschema #1, subschema #2` from the `recurring_sales_invoice/details_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `recurring_sales_invoice/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `recurring_sales_invoice/details_attributes` request property `oneOf` list
### `PATCH /{administration_id}/sales_invoices/{id}{format}`
- :warning: removed `subschema #1, subschema #2` from the `sales_invoice/custom_fields_attributes` request property `oneOf` list
- :warning: removed `subschema #1, subschema #2` from the `sales_invoice/details_attributes` request property `oneOf` list
- :warning: the `sales_invoice/invoice_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `sales_invoice/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `sales_invoice/details_attributes` request property `oneOf` list
### `POST /{administration_id}/sales_invoices{format}`
- :warning: removed `subschema #1, subschema #2` from the `sales_invoice/custom_fields_attributes` request property `oneOf` list
- :warning: removed `subschema #1, subschema #2` from the `sales_invoice/details_attributes` request property `oneOf` list
- :warning: the `sales_invoice/invoice_date` request property type/format changed from `string`/`` to `string`/`date`
- added `subschema #1, subschema #2` to the `sales_invoice/custom_fields_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `sales_invoice/details_attributes` request property `oneOf` list
### `POST /{administration_id}/subscriptions/{id}/create_and_schedule_one_off_sales_invoice{format}`
- :warning: removed `subschema #1, subschema #2` from the `sales_invoice/details_attributes` request property `oneOf` list
- added `subschema #1, subschema #2` to the `sales_invoice/details_attributes` request property `oneOf` list
### `DELETE /{administration_id}/task_list_groups/{id}{format}`
- endpoint added
### `GET /{administration_id}/task_list_groups/{id}{format}`
- endpoint added
### `PATCH /{administration_id}/task_list_groups/{id}{format}`
- endpoint added
### `POST /{administration_id}/task_list_groups/{task_list_group_id}/tasks{format}`
- endpoint added
### `DELETE /{administration_id}/task_list_tasks/{id}{format}`
- endpoint added
### `GET /{administration_id}/task_list_tasks/{id}{format}`
- endpoint added
### `PATCH /{administration_id}/task_list_tasks/{id}{format}`
- endpoint added
### `DELETE /{administration_id}/task_list_tasks/{task_list_task_id}/assignment{format}`
- endpoint added
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/assignment{format}`
- endpoint added
### `DELETE /{administration_id}/task_list_tasks/{task_list_task_id}/completion{format}`
- endpoint added
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/completion{format}`
- endpoint added
### `POST /{administration_id}/task_list_tasks/{task_list_task_id}/notes{format}`
- endpoint added
### `DELETE /{administration_id}/task_list_templates/{id}{format}`
- endpoint added
### `GET /{administration_id}/task_list_templates/{id}{format}`
- endpoint added
### `PATCH /{administration_id}/task_list_templates/{id}{format}`
- endpoint added
### `POST /{administration_id}/task_list_templates/{task_list_template_id}/groups{format}`
- endpoint added
### `POST /{administration_id}/task_list_templates/{task_list_template_id}/task_lists{format}`
- endpoint added
### `GET /{administration_id}/task_list_templates{format}`
- endpoint added
### `POST /{administration_id}/task_list_templates{format}`
- endpoint added
### `DELETE /{administration_id}/task_lists/{id}{format}`
- endpoint added
### `GET /{administration_id}/task_lists/{id}{format}`
- endpoint added
### `PATCH /{administration_id}/task_lists/{id}{format}`
- endpoint added
### `POST /{administration_id}/task_lists/{task_list_id}/groups{format}`
- endpoint added
### `GET /{administration_id}/task_lists{format}`
- endpoint added
### `POST /{administration_id}/task_lists{format}`
- endpoint added
### `PATCH /{administration_id}/time_entries/{id}{format}`
- the `billable` request property default value `true` was added
---
## Document: 2026-03-24
URL: /changelog/2026-03-24
# 2026-03-24
## API Changelog v2-20260324-c5dc3dab1c vs. v2-20260324-a4485080b0
### `PATCH /{administration_id}/time_entries/{id}/resume{format}`
- endpoint added
### `PATCH /{administration_id}/time_entries/{id}/stop{format}`
- endpoint added
---
## Document: 2026-03-16
URL: /changelog/2026-03-16
# 2026-03-16
## API Changelog v2-20260313-c92a89c847 vs. v2-20260316-bc9203e43f
### `GET /{administration_id}/reports/creditors_aging{format}`
- endpoint added
---
## Document: 2026-03-10
URL: /changelog/2026-03-10
# 2026-03-10
## API Changelog v2-20260310-a74b63cb4c vs. v2-20260310-7d283a2540
### `GET /{administration_id}/reports/cash_flow{format}`
- :warning: removed the media type 'application/xml' for the response with the status '200'
- the response property 'cash_paid_by_ledger_account/ledger_accounts' became required for the status '200'
- the response property 'cash_paid_by_ledger_account/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'cash_paid_by_ledger_account/ledger_accounts/items/value' became required for the status '200'
- the response property 'cash_received_by_ledger_account/ledger_accounts' became required for the status '200'
- the response property 'cash_received_by_ledger_account/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'cash_received_by_ledger_account/ledger_accounts/items/value' became required for the status '200'
### `GET /{administration_id}/reports/general_ledger{format}`
- :warning: removed the media type 'application/xml' for the response with the status '200'
- the response property 'credit_sums/ledger_accounts' became required for the status '200'
- the response property 'credit_sums/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'credit_sums/ledger_accounts/items/value' became required for the status '200'
- the response property 'debit_sums/ledger_accounts' became required for the status '200'
- the response property 'debit_sums/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'debit_sums/ledger_accounts/items/value' became required for the status '200'
- the response property 'final_balance/ledger_accounts' became required for the status '200'
- the response property 'final_balance/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'final_balance/ledger_accounts/items/value' became required for the status '200'
- the response property 'start_balance/ledger_accounts' became required for the status '200'
- the response property 'start_balance/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'start_balance/ledger_accounts/items/value' became required for the status '200'
### `GET /{administration_id}/reports/profit_loss{format}`
- :warning: removed the media type 'application/xml' for the response with the status '200'
- the response property 'direct_costs_by_ledger_account/ledger_accounts' became required for the status '200'
- the response property 'direct_costs_by_ledger_account/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'direct_costs_by_ledger_account/ledger_accounts/items/value' became required for the status '200'
- the response property 'expenses_by_ledger_account/ledger_accounts' became required for the status '200'
- the response property 'expenses_by_ledger_account/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'expenses_by_ledger_account/ledger_accounts/items/value' became required for the status '200'
- the response property 'other_income_expenses_by_ledger_account/ledger_accounts' became required for the status '200'
- the response property 'other_income_expenses_by_ledger_account/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'other_income_expenses_by_ledger_account/ledger_accounts/items/value' became required for the status '200'
- the response property 'revenue_by_ledger_account/ledger_accounts' became required for the status '200'
- the response property 'revenue_by_ledger_account/ledger_accounts/items/ledger_account_id' became required for the status '200'
- the response property 'revenue_by_ledger_account/ledger_accounts/items/value' became required for the status '200'
---
## Document: 2026-03-09
URL: /changelog/2026-03-09
# 2026-03-09
## API Changelog v2-20260302-e93f1c3bd0 vs. v2-20260309-1784f2d811
### `GET /{administration_id}/external_sales_invoices/synchronization{format}`
- endpoint added
### `POST /{administration_id}/external_sales_invoices/synchronization{format}`
- endpoint added
### `PATCH /{administration_id}/webhooks/{id}/activate{format}`
- endpoint added
### `PATCH /{administration_id}/webhooks/{id}/deactivate{format}`
- endpoint added
### `GET /{administration_id}/webhooks{format}`
- added the optional property '/items/deactivated_at' to the response with the '200' status
### `POST /{administration_id}/webhooks{format}`
- added the optional property 'deactivated_at' to the response with the '201' status
---
## Document: 2026-02-27
URL: /changelog/2026-02-27
# 2026-02-27
## API Changelog v2-20260226-b4795b2566 vs. v2-20260227-955baa3d70
### `GET /{administration_id}/contacts/customer_id/{customer_id}{format}`
- added the optional property '/allOf[#/components/schemas/base_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/contacts/filter{format}`
- added the optional property '/items/allOf[#/components/schemas/base_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/contacts/synchronization{format}`
- added the optional property '/items/allOf[#/components/schemas/base_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/contacts/{id}{format}`
- added the optional property '/allOf[#/components/schemas/base_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/contacts/{id}{format}`
- added the optional property '/allOf[#/components/schemas/base_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/contacts{format}`
- added the optional property '/items/allOf[#/components/schemas/base_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/contacts{format}`
- added the optional property '/allOf[#/components/schemas/base_contact_response]/direct_debit' to the response with the '201' status
### `POST /{administration_id}/documents/general_documents/synchronization{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/general_documents/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/documents/general_documents/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/general_documents{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/documents/general_documents{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '201' status
### `POST /{administration_id}/documents/purchase_invoices/synchronization{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/purchase_invoices/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/documents/purchase_invoices/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/purchase_invoices{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/documents/purchase_invoices{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '201' status
### `POST /{administration_id}/documents/receipts/synchronization{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/receipts/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/documents/receipts/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/receipts{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/documents/receipts{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '201' status
### `POST /{administration_id}/documents/typeless_documents/synchronization{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/typeless_documents/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/documents/typeless_documents{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/documents/typeless_documents{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '201' status
### `GET /{administration_id}/estimates/find_by_estimate_id/{estimate_id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/estimates/synchronization{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/estimates/{id}/bill_estimate{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/estimates/{id}/change_state{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/estimates/{id}/send_estimate{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/estimates/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/estimates/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/estimates{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/estimates{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '201' status
### `PATCH /{administration_id}/external_sales_invoices/{id}/mark_as_dubious{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/external_sales_invoices/{id}/mark_as_uncollectible{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/external_sales_invoices/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/external_sales_invoices/{id}{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `GET /{administration_id}/external_sales_invoices{format}`
- added the optional property '/items/contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '200' status
### `POST /{administration_id}/external_sales_invoices{format}`
- added the optional property 'contact/oneOf[#/components/schemas/simple_contact_response]/direct_debit' to the response with the '201' status
### `GET /{administration_id}/purchase_transactions/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/purchase_transactions{format}`
- added the optional property '/items/contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/recurring_sales_invoices/synchronization{format}`
- added the optional property '/items/contact/direct_debit' to the response with the '200' status
- added the optional property '/items/subscription/oneOf[#/components/schemas/subscription_response]/contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/recurring_sales_invoices/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
- added the optional property 'subscription/oneOf[#/components/schemas/subscription_response]/contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/recurring_sales_invoices/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
- added the optional property 'subscription/oneOf[#/components/schemas/subscription_response]/contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/recurring_sales_invoices{format}`
- added the optional property '/items/contact/direct_debit' to the response with the '200' status
- added the optional property '/items/subscription/oneOf[#/components/schemas/subscription_response]/contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/recurring_sales_invoices{format}`
- added the optional property 'contact/direct_debit' to the response with the '201' status
- added the optional property 'subscription/oneOf[#/components/schemas/subscription_response]/contact/direct_debit' to the response with the '201' status
### `GET /{administration_id}/sales_invoices/find_by_invoice_id/{invoice_id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/sales_invoices/find_by_reference/{reference}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/sales_invoices/synchronization{format}`
- added the optional property '/items/contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/sales_invoices/{id}/duplicate_creditinvoice{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/sales_invoices/{id}/mark_as_dubious{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/sales_invoices/{id}/mark_as_uncollectible{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/sales_invoices/{id}/pause{format}`
- added the optional property 'contact/direct_debit' to the response with the '201' status
### `PATCH /{administration_id}/sales_invoices/{id}/register_payment_creditinvoice{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/sales_invoices/{id}/resume{format}`
- added the optional property 'contact/direct_debit' to the response with the '201' status
### `PATCH /{administration_id}/sales_invoices/{id}/send_invoice{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/sales_invoices/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/sales_invoices/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/sales_invoices{format}`
- added the optional property '/items/contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/sales_invoices{format}`
- added the optional property 'contact/direct_debit' to the response with the '201' status
### `POST /{administration_id}/subscriptions/{id}/create_and_schedule_one_off_sales_invoice{format}`
- added the optional property 'contact/direct_debit' to the response with the '201' status
### `DELETE /{administration_id}/subscriptions/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/subscriptions/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/subscriptions/{id}{format}`
- added the optional property 'contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/subscriptions{format}`
- added the optional property '/items/contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/subscriptions{format}`
- added the optional property 'contact/direct_debit' to the response with the '201' status
### `GET /{administration_id}/time_entries/{id}{format}`
- added the optional property 'sales_invoice/oneOf[#/components/schemas/sales_invoice_response]/contact/direct_debit' to the response with the '200' status
### `PATCH /{administration_id}/time_entries/{id}{format}`
- added the optional property 'sales_invoice/oneOf[#/components/schemas/sales_invoice_response]/contact/direct_debit' to the response with the '200' status
### `GET /{administration_id}/time_entries{format}`
- added the optional property '/items/sales_invoice/oneOf[#/components/schemas/sales_invoice_response]/contact/direct_debit' to the response with the '200' status
### `POST /{administration_id}/time_entries{format}`
- added the optional property 'sales_invoice/oneOf[#/components/schemas/sales_invoice_response]/contact/direct_debit' to the response with the '201' status
---
## Document: 2026-02-26
URL: /changelog/2026-02-26
# 2026-02-26
## API Changelog v2-20260225-2c308f5d0a vs. v2-20260226-db4d5d42d3
### `GET /{administration_id}/ledger_accounts/{id}{format}`
- added the optional property 'active' to the response with the '200' status
### `PATCH /{administration_id}/ledger_accounts/{id}{format}`
- added the optional property 'active' to the response with the '200' status
### `GET /{administration_id}/ledger_accounts{format}`
- added the optional property '/items/active' to the response with the '200' status
### `POST /{administration_id}/ledger_accounts{format}`
- added the optional property 'active' to the response with the '201' status
---
## Document: 2026-02-25
URL: /changelog/2026-02-25
# 2026-02-25
## API Changelog v2-20260225-1468c883f2 vs. v2-20260225-2c308f5d0a
### `GET /{administration_id}/sales_invoices{format}`
- removed the non-success response with the status '404'
---
## Document: 2026-02-12
URL: /changelog/2026-02-12
# 2026-02-12
## API Changelog v2-20260211-09d3d6e108 vs. v2-20260212-697226c160
### `POST /{administration_id}/time_entries{format}`
- :warning: the 'time_entry/ended_at' request property type/format changed from 'string'/'' to 'string'/'date-time'
- :warning: the 'time_entry/started_at' request property type/format changed from 'string'/'' to 'string'/'date-time'
- the 'billable' request property default value 'true' was added
---
## Document: 2026-02-11
URL: /changelog/2026-02-11
# 2026-02-11
## API Changelog v2-20260209-3000cdbd5d vs. v2-20260211-b71255641d
### `GET /{administration_id}/reports/cash_flow{format}`
- added the media type 'application/xml' for the response with the status '200'
- added the optional property 'cash_paid_by_ledger_account/ledger_accounts' to the response with the '200' status
- added the optional property 'cash_received_by_ledger_account/ledger_accounts' to the response with the '200' status
- response property 'cash_paid_by_ledger_account/additionalProperties/' deprecated (sunset: 2026-03-10)
- response property 'cash_received_by_ledger_account/additionalProperties/' deprecated (sunset: 2026-03-10)
### `GET /{administration_id}/reports/general_ledger{format}`
- added the media type 'application/xml' for the response with the status '200'
- added the optional property 'credit_sums/ledger_accounts' to the response with the '200' status
- added the optional property 'debit_sums/ledger_accounts' to the response with the '200' status
- added the optional property 'final_balance/ledger_accounts' to the response with the '200' status
- added the optional property 'start_balance/ledger_accounts' to the response with the '200' status
- response property 'credit_sums/additionalProperties/' deprecated (sunset: 2026-03-10)
- response property 'debit_sums/additionalProperties/' deprecated (sunset: 2026-03-10)
- response property 'final_balance/additionalProperties/' deprecated (sunset: 2026-03-10)
- response property 'start_balance/additionalProperties/' deprecated (sunset: 2026-03-10)
### `GET /{administration_id}/reports/profit_loss{format}`
- added the media type 'application/xml' for the response with the status '200'
- added the optional property 'direct_costs_by_ledger_account/ledger_accounts' to the response with the '200' status
- added the optional property 'expenses_by_ledger_account/ledger_accounts' to the response with the '200' status
- added the optional property 'other_income_expenses_by_ledger_account/ledger_accounts' to the response with the '200' status
- added the optional property 'revenue_by_ledger_account/ledger_accounts' to the response with the '200' status
- response property 'direct_costs_by_ledger_account/additionalProperties/' deprecated (sunset: 2026-03-10)
- response property 'expenses_by_ledger_account/additionalProperties/' deprecated (sunset: 2026-03-10)
- response property 'other_income_expenses_by_ledger_account/additionalProperties/' deprecated (sunset: 2026-03-10)
- response property 'revenue_by_ledger_account/additionalProperties/' deprecated (sunset: 2026-03-10)
## API Changelog v2-20260211-b71255641d vs. v2-20260211-09d3d6e108
### `GET /{administration_id}/workflows/{id}{format}`
- :warning: removed the optional property 'steps/items/collection_method' from the response with the '200' status
- :warning: removed the optional property 'steps/items/payment_methods' from the response with the '200' status
- :warning: removed the optional property 'steps/items/show_qr_code' from the response with the '200' status
- added the optional property 'collection_method' to the response with the '200' status
- added the optional property 'number_of_collections' to the response with the '200' status
- added the optional property 'payment_methods' to the response with the '200' status
- added the optional property 'show_qr_code' to the response with the '200' status
### `GET /{administration_id}/workflows{format}`
- :warning: removed the optional property '/items/steps/items/collection_method' from the response with the '200' status
- :warning: removed the optional property '/items/steps/items/payment_methods' from the response with the '200' status
- :warning: removed the optional property '/items/steps/items/show_qr_code' from the response with the '200' status
- added the optional property '/items/collection_method' to the response with the '200' status
- added the optional property '/items/number_of_collections' to the response with the '200' status
- added the optional property '/items/payment_methods' to the response with the '200' status
- added the optional property '/items/show_qr_code' to the response with the '200' status
---
## Document: 2026-02-09
URL: /changelog/2026-02-09
# 2026-02-09
## API Changelog v2-20260206-2ca8678363 vs. v2-20260209-3000cdbd5d
### `GET /administrations{format}`
- added the optional property '/items/period_start_date' to the response with the '200' status
---
## Document: 2026-02-06
URL: /changelog/2026-02-06
# 2026-02-06
## API Changelog v2-20260205-f6f23c15a2 vs. v2-20260206-2ca8678363
### `GET /{administration_id}/users{format}`
- :warning: the '/items/' response's property type/format changed from 'object'/'' to ''/'' for status '200'
- :warning: removed the optional property '/items/created_at' from the response with the '200' status
- :warning: removed the optional property '/items/id' from the response with the '200' status
- :warning: removed the optional property '/items/name' from the response with the '200' status
- :warning: removed the optional property '/items/updated_at' from the response with the '200' status
- added '#/components/schemas/base_user_response, subschema #2' to the '/items/' response property 'allOf' list for the response status '200'
---
## Document: 2026-02-05
URL: /changelog/2026-02-05
# 2026-02-05
## API Changelog v2-20260130-40f6bc00c7 vs. v2-20260205-f6f23c15a2
### `GET /{administration_id}/workflows/{id}{format}`
- endpoint added
### `GET /{administration_id}/workflows{format}`
- added the optional property '/items/steps' to the response with the '200' status
---
## Document: 2026-01-30
URL: /changelog/2026-01-30
# 2026-01-30
## API Changelog v2-20260108-683cbfbf17 vs. v2-20260130-40f6bc00c7
### `GET /{administration_id}/reports/debtors_aging{format}`
- endpoint added
---
## Document: 2026-01-08
URL: /changelog/2026-01-08
# 2026-01-08
## API Changelog v2-20251223-d1277b6a05 vs. v2-20260108-683cbfbf17
### `POST /{administration_id}/financial_mutations/synchronization{format}`
- added the optional property '/items/settlement_state' to the response with the '200' status
### `DELETE /{administration_id}/financial_mutations/{id}/unlink_booking{format}`
- added the optional property 'settlement_state' to the response with the '200' status
### `GET /{administration_id}/financial_mutations/{id}{format}`
- added the optional property 'settlement_state' to the response with the '200' status
### `GET /{administration_id}/financial_mutations{format}`
- added the optional property '/items/settlement_state' to the response with the '200' status
### `PATCH /{administration_id}/financial_statements/{id}{format}`
- added the optional property 'financial_mutations/items/settlement_state' to the response with the '200' status
### `POST /{administration_id}/financial_statements{format}`
- added the optional property 'financial_mutations/items/settlement_state' to the response with the '201' status
---
## Document: 2025-12-23
URL: /changelog/2025-12-23
# 2025-12-23
## API Changelog v2-20251215-45440d8c52 vs. v2-20251223-d1277b6a05
### `GET /{administration_id}/reports/creditors{format}`
- :warning: removed the optional property 'cebtors' from the response with the '200' status
- added the optional property 'creditors' to the response with the '200' status
### `GET /{administration_id}/reports/debtors{format}`
- :warning: removed the optional property 'cebtors' from the response with the '200' status
- added the optional property 'debtors' to the response with the '200' status
---
## Document: 2025-12-15
URL: /changelog/2025-12-15
# 2025-12-15
## API Changelog v2-20251125-14f7192f93 vs. v2-20251215-45440d8c52
### `POST /{administration_id}/assets/{id}/value_changes/retroactive_linear_value_changes{format}`
- endpoint added
---
## Document: 2025-11-25
URL: /changelog/2025-11-25
# 2025-11-25
## API Changelog v2-20251119-4ee39373bb vs. v2-20251125-14f7192f93
### `POST /{administration_id}/documents/general_documents/{id}/attachments{format}`
- added the non-success response with the status '422'
### `POST /{administration_id}/documents/general_journal_documents/{id}/attachments{format}`
- added the non-success response with the status '422'
### `POST /{administration_id}/documents/purchase_invoices/{id}/attachments{format}`
- added the non-success response with the status '422'
### `POST /{administration_id}/documents/receipts/{id}/attachments{format}`
- added the non-success response with the status '422'
### `POST /{administration_id}/documents/typeless_documents/{id}/attachments{format}`
- added the non-success response with the status '422'
### `POST /{administration_id}/estimates/{id}/attachments{format}`
- added the non-success response with the status '422'
### `POST /{administration_id}/sales_invoices/{id}/attachments{format}`
- added the non-success response with the status '422'
---
## Document: 2025-11-19
URL: /changelog/2025-11-19
# 2025-11-19
## API Changelog v2-20251118-0a3c5b6cc2 vs. v2-20251119-4ee39373bb
### `GET /{administration_id}/reports/creditors{format}`
- endpoint added
### `GET /{administration_id}/reports/debtors{format}`
- endpoint added
---
## Document: 2025-11-18
URL: /changelog/2025-11-18
# 2025-11-18
## API Changelog v2-20251113-d42bb9eb7f vs. v2-20251118-0a3c5b6cc2
### `GET /{administration_id}/reports/assets{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/balance_sheet{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/cash_flow{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/general_ledger{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/journal_entries{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/profit_loss{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/subscriptions{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
### `GET /{administration_id}/reports/tax{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$' to '^\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month|this_quarter|prev_quarter|next_quarter|this_year|prev_year|next_year$'
---
## Document: 2025-11-13
URL: /changelog/2025-11-13
# 2025-11-13
## API Changelog v2-20251028-dc21bba2b3 vs. v2-20251113-d42bb9eb7f
### `GET /{administration_id}/contacts/customer_id/{customer_id}{format}`
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' to '^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `GET /{administration_id}/contacts/filter{format}`
- the '/items/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' to '^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `POST /{administration_id}/contacts/synchronization{format}`
- the '/items/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' to '^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `GET /{administration_id}/contacts/{id}{format}`
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' to '^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `PATCH /{administration_id}/contacts/{id}{format}`
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' to '^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `GET /{administration_id}/contacts{format}`
- the '/items/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' to '^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `POST /{administration_id}/contacts{format}`
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' to '^https:\/\/moneybird\.\w{3,9}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '201'
---
## Document: 2025-10-28
URL: /changelog/2025-10-28
# 2025-10-28
## API Changelog v2-20251021-9f179bd6b3 vs. v2-20251028-dc21bba2b3
### `GET /{administration_id}/reports/assets{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/balance_sheet{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/cash_flow{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/expenses_by_project{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `POST /{administration_id}/reports/export/auditfile{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `POST /{administration_id}/reports/export/brugstaat{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `POST /{administration_id}/reports/export/ledger_accounts{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/general_ledger{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/journal_entries{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/profit_loss{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/revenue_by_project{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/subscriptions{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
### `GET /{administration_id}/reports/tax{format}`
- the endpoint scheme security 'bearerAuth' was added to the API
---
## Document: 2025-10-21
URL: /changelog/2025-10-21
# 2025-10-21
## API Changelog v2-20251020-eedc9489e3 vs. v2-20251021-9f179bd6b3
### `GET /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}`
- endpoint deprecated
---
## Document: 2025-10-20
URL: /changelog/2025-10-20
# 2025-10-20
## API Changelog v2-20251017-4f131eb8a5 vs. v2-20251020-80d0905718
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- :warning: the 'expenses_by_contact' response's property type/format changed from 'object'/'' to 'array'/'' for status '200'
- added the new optional 'query' request parameter 'page'
- added the new optional 'query' request parameter 'per_page'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- :warning: the 'expenses_by_project' response's property type/format changed from 'object'/'' to 'array'/'' for status '200'
- added the new optional 'query' request parameter 'page'
- added the new optional 'query' request parameter 'per_page'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- :warning: the 'revenue_by_contact' response's property type/format changed from 'object'/'' to 'array'/'' for status '200'
- added the new optional 'query' request parameter 'page'
- added the new optional 'query' request parameter 'per_page'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- :warning: the 'revenue_by_project' response's property type/format changed from 'object'/'' to 'array'/'' for status '200'
- added the new optional 'query' request parameter 'page'
- added the new optional 'query' request parameter 'per_page'
## API Changelog v2-20251020-80d0905718 vs. v2-20251020-eedc9489e3
### `POST /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate/url{format}`
- added the new optional request property 'mandate_request/workflow_id'
### `POST /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- added the new optional request property 'mandate_request/workflow_id'
---
## Document: 2025-10-17
URL: /changelog/2025-10-17
# 2025-10-17
## API Changelog v2-20251014-0d8d83cd02 vs. v2-20251017-4f131eb8a5
### `POST /{administration_id}/reports/export/auditfile{format}`
- endpoint added
### `POST /{administration_id}/reports/export/brugstaat{format}`
- endpoint added
### `POST /{administration_id}/reports/export/ledger_accounts{format}`
- endpoint added
---
## Document: 2025-10-14
URL: /changelog/2025-10-14
# 2025-10-14
## API Changelog v2-20251013-bad0f55ae4 vs. v2-20251014-0d8d83cd02
### `GET /{administration_id}/reports/assets{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/balance_sheet{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/cash_flow{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/general_ledger{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/journal_entries{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/profit_loss{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/subscriptions{format}`
- removed the non-success response with the status '403'
### `GET /{administration_id}/reports/tax{format}`
- removed the non-success response with the status '403'
---
## Document: 2025-10-13
URL: /changelog/2025-10-13
# 2025-10-13
## API Changelog v2-20251010-47762f0208 vs. v2-20251013-bad0f55ae4
### `GET /{administration_id}/reports/assets{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/balance_sheet{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/cash_flow{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/general_ledger{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/journal_entries{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/profit_loss{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/subscriptions{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/tax{format}`
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$' to '^(\d{6,8}(..\d{6,8})?|this_month|prev_month|next_month)$'
---
## Document: 2025-10-10
URL: /changelog/2025-10-10
# 2025-10-10
## API Changelog v2-20251009-afcce00819 vs. v2-20251010-47762f0208
### `GET /{administration_id}/contacts/filter{format}`
- added the new optional 'query' request parameter 'page'
### `GET /{administration_id}/estimates{format}`
- added the new optional 'query' request parameter 'page'
### `GET /{administration_id}/external_sales_invoices{format}`
- added the new optional 'query' request parameter 'page'
### `GET /{administration_id}/projects{format}`
- added the non-success response with the status '400'
### `GET /{administration_id}/purchase_transactions{format}`
- added the new optional 'query' request parameter 'page'
### `GET /{administration_id}/recurring_sales_invoices{format}`
- added the new optional 'query' request parameter 'page'
### `GET /{administration_id}/sales_invoices{format}`
- added the new optional 'query' request parameter 'page'
### `GET /{administration_id}/subscription_templates{format}`
- added the non-success response with the status '400'
### `GET /{administration_id}/tax_rates{format}`
- added the new optional 'query' request parameter 'page'
### `GET /{administration_id}/time_entries{format}`
- added the new optional 'query' request parameter 'page'
---
## Document: 2025-10-09
URL: /changelog/2025-10-09
# 2025-10-09
## API Changelog v2-20251007-c38bb8ab27 vs. v2-20251009-9c477a05c0
### `POST /{administration_id}/downloads/{id}/download{format}`
- endpoint added
### `GET /{administration_id}/downloads{format}`
- endpoint added
## API Changelog v2-20251009-9c477a05c0 vs. v2-20251009-afcce00819
### `GET /{administration_id}/reports/balance_sheet{format}`
- :warning: removed the optional property 'current_assets_by_ledger_account' from the response with the '200' status
- :warning: removed the optional property 'current_liabilities_by_ledger_account' from the response with the '200' status
- :warning: removed the optional property 'equity_by_ledger_account' from the response with the '200' status
- :warning: removed the optional property 'non_current_assets_by_ledger_account' from the response with the '200' status
- :warning: removed the optional property 'non_current_liabilities_by_ledger_account' from the response with the '200' status
- :warning: removed the optional property 'provisions_by_ledger_account' from the response with the '200' status
- :warning: removed the optional property 'total_credit' from the response with the '200' status
- :warning: removed the optional property 'total_debit' from the response with the '200' status
- :warning: removed the optional property 'working_capital' from the response with the '200' status
- added the optional property 'credit' to the response with the '200' status
- added the optional property 'debit' to the response with the '200' status
---
## Document: 2025-10-07
URL: /changelog/2025-10-07
# 2025-10-07
## API Changelog v2-20251002-450d4c88dd vs. v2-20251007-c38bb8ab27
### `POST /{administration_id}/products/{id}/sales_link{format}`
- endpoint added
### `GET /{administration_id}/subscription_templates/{id}/checkout_identifier{format}`
- endpoint deprecated
### `POST /{administration_id}/subscription_templates/{id}/sales_link{format}`
- endpoint added
---
## Document: 2025-10-02
URL: /changelog/2025-10-02
# 2025-10-02
## API Changelog v2-20251001-696a317e40 vs. v2-20251002-450d4c88dd
### `GET /{administration_id}/reports/tax{format}`
- endpoint added
---
## Document: 2025-10-01
URL: /changelog/2025-10-01
# 2025-10-01
## API Changelog v2-20250930-1197c738d2 vs. v2-20251001-2167ff31ed
### `GET /{administration_id}/reports/assets{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/balance_sheet{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/cash_flow{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/general_ledger{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/journal_entries{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/profit_loss{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
### `GET /{administration_id}/reports/subscriptions{format}`
- :warning: for the 'query' request parameter 'period', default value 'this_month' was added
- :warning: changed the pattern of the 'query' request parameter 'period' from '^(\d{6,8}..\d{6,8}|this_quarter|this_month|this_year|prev_quarter|prev_month|prev_year|next_quarter|next_month|next_year)$' to '^(\d{6,8}..\d{6,8}|this_month|prev_month|next_month)$'
## API Changelog v2-20251001-2167ff31ed vs. v2-20251001-696a317e40
### `POST /{administration_id}/sepa_credit_transfer{format}`
- endpoint added
---
## Document: 2025-09-30
URL: /changelog/2025-09-30
# 2025-09-30
## API Changelog v2-20250929-24d9aa4218 vs. v2-20250930-1197c738d2
### `GET /{administration_id}/reports/general_ledger{format}`
- endpoint added
---
## Document: 2025-09-29
URL: /changelog/2025-09-29
# 2025-09-29
## API Changelog v2-20250916-4d2c64ff86 vs. v2-20250929-a684c6833d
### `GET /{administration_id}/reports/journal_entries{format}`
- endpoint added
## API Changelog v2-20250929-a684c6833d vs. v2-20250929-24d9aa4218
### `GET /{administration_id}/reports/balance_sheet{format}`
- :warning: the 'current_assets_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'current_liabilities_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'equity_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'non_current_assets_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'non_current_liabilities_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'provisions_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'total_credit' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'total_debit' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'working_capital' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/cash_flow{format}`
- :warning: the 'cash_paid_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'cash_received_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'closing_balance' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'opening_balance' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: deleted the 'query' request parameter 'granularity'
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- :warning: the 'expenses_by_contact/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: deleted the 'query' request parameter 'granularity'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- :warning: the 'expenses_by_project/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: deleted the 'query' request parameter 'granularity'
### `GET /{administration_id}/reports/profit_loss{format}`
- :warning: the 'direct_costs_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'expenses_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'gross_profit' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'net_profit' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'operating_profit' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'other_income_expenses_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'revenue_by_ledger_account/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'total_expenses' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: the 'total_revenue' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: deleted the 'query' request parameter 'granularity'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- :warning: the 'revenue_by_contact/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: deleted the 'query' request parameter 'granularity'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- :warning: the 'revenue_by_project/additionalProperties/' response's property type/format changed from 'object'/'' to 'string'/'' for status '200'
- :warning: deleted the 'query' request parameter 'granularity'
### `GET /{administration_id}/reports/subscriptions{format}`
- :warning: removed the optional property 'historic_lifetime_value' from the response with the '200' status
- :warning: removed the optional property 'historic_revenue_per_month' from the response with the '200' status
- response property 'annual_run_rate' list-of-types was narrowed by removing types 'number and null' from media type 'application/json' of response '200'
- response property 'churn_rate' list-of-types was narrowed by removing types 'number and null' from media type 'application/json' of response '200'
- response property 'lifetime_value' list-of-types was narrowed by removing types 'number and null' from media type 'application/json' of response '200'
- response property 'monthly_recurring_revenue' list-of-types was narrowed by removing types 'number and null' from media type 'application/json' of response '200'
---
## Document: 2025-09-16
URL: /changelog/2025-09-16
# 2025-09-16
## API Changelog v2-20250915-e53353db8a vs. v2-20250916-d2772c5f13
### `GET /{administration_id}/reports/balance_sheet{format}`
- added the non-success response with the status '429'
### `GET /{administration_id}/reports/cash_flow{format}`
- endpoint added
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- added the non-success response with the status '429'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- added the non-success response with the status '429'
### `GET /{administration_id}/reports/profit_loss{format}`
- added the non-success response with the status '429'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- added the non-success response with the status '429'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- added the non-success response with the status '429'
### `GET /{administration_id}/reports/subscriptions{format}`
- endpoint added
### `GET /{administration_id}/users{format}`
- added the non-success response with the status '429'
## API Changelog v2-20250916-d2772c5f13 vs. v2-20250916-4d2c64ff86
### `GET /{administration_id}/reports/assets{format}`
- endpoint added
### `GET /{administration_id}/reports/balance_sheet{format}`
- :warning: the 'current_assets_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'current_liabilities_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'equity_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'non_current_assets_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'non_current_liabilities_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'provisions_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'total_credit/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'total_debit/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'working_capital/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/cash_flow{format}`
- :warning: the 'cash_paid_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'cash_received_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'closing_balance/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'opening_balance/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- :warning: the 'expenses_by_contact/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/expenses_by_project{format}`
- :warning: the 'expenses_by_project/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/ledger_accounts/{ledger_account_id}{format}`
- endpoint added
### `GET /{administration_id}/reports/profit_loss{format}`
- :warning: the 'direct_costs_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'expenses_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'gross_profit/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'net_profit/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'operating_profit/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'other_income_expenses_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'revenue_by_ledger_account/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'total_expenses/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'total_revenue/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- :warning: the 'revenue_by_contact/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/revenue_by_project{format}`
- :warning: the 'revenue_by_project/additionalProperties/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
### `GET /{administration_id}/reports/subscriptions{format}`
- :warning: the 'historic_lifetime_value/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
- :warning: the 'historic_revenue_per_month/additionalProperties/' response's property type/format changed from 'number, string'/'' to 'string'/'' for status '200'
---
## Document: 2025-09-15
URL: /changelog/2025-09-15
# 2025-09-15
## API Changelog v2-20250912-07636f1725 vs. v2-20250915-e53353db8a
### `GET /{administration_id}/reports/expenses_by_contact{format}`
- endpoint added
### `GET /{administration_id}/reports/expenses_by_project{format}`
- endpoint added
### `GET /{administration_id}/reports/revenue_by_contact{format}`
- endpoint added
---
## Document: 2025-09-12
URL: /changelog/2025-09-12
# 2025-09-12
## API Changelog v2-20250910-7a70172ef8 vs. v2-20250912-ce5a96738d
### `GET /{administration_id}/report/balance_sheet{format}`
- :warning: api path removed without deprecation
### `GET /{administration_id}/report/profit_loss{format}`
- :warning: api path removed without deprecation
### `GET /{administration_id}/report/revenue_by_project{format}`
- :warning: api path removed without deprecation
### `GET /{administration_id}/reports/balance_sheet{format}`
- endpoint added
### `GET /{administration_id}/reports/profit_loss{format}`
- endpoint added
### `GET /{administration_id}/reports/revenue_by_project{format}`
- endpoint added
## API Changelog v2-20250912-ce5a96738d vs. v2-20250912-07636f1725
---
## Document: 2025-09-10
URL: /changelog/2025-09-10
# 2025-09-10
## API Changelog v2-20250909-bea84c29c6 vs. v2-20250910-07dd124685
### `GET /{administration_id}/report/profit_loss{format}`
- added the non-success response with the status '401'
## API Changelog v2-20250910-07dd124685 vs. v2-20250910-7a70172ef8
### `GET /{administration_id}/report/balance_sheet{format}`
- endpoint added
### `GET /{administration_id}/report/revenue_by_project{format}`
- endpoint added
---
## Document: 2025-09-09
URL: /changelog/2025-09-09
# 2025-09-09
## API Changelog v2-20250905-4b6dbb7f0b vs. v2-20250909-bea84c29c6
### `GET /{administration_id}/customer_contact_portal/{contact_id}/invoices{format}`
- endpoint added
### `GET /{administration_id}/customer_contact_portal/{contact_id}/subscriptions/{id}{format}`
- endpoint added
### `GET /{administration_id}/customer_contact_portal/{contact_id}{format}`
- endpoint added
---
## Document: 2025-09-05
URL: /changelog/2025-09-05
# 2025-09-05
## API Changelog v2-20250901-f7c166363a vs. v2-20250905-4b6dbb7f0b
### `GET /{administration_id}/report/profit_loss{format}`
- endpoint added
---
## Document: 2025-09-01
URL: /changelog/2025-09-01
# 2025-09-01
## API Changelog v2-20250822-73ed554390 vs. v2-20250901-f7c166363a
### `GET /{administration_id}/assets{format}`
- added the new optional 'query' request parameter 'page'
- added the new optional 'query' request parameter 'per_page'
---
## Document: 2025-08-21
URL: /changelog/2025-08-21
# 2025-08-21
## API Changelog v2-20250818-547c1e9297 vs. v2-20250821-
### `POST /{administration_id}/assets/{id}/disposals{format}`
- endpoint added
### `DELETE /{administration_id}/assets/{id}/sources/{detail_id}{format}`
- endpoint added
### `POST /{administration_id}/assets/{id}/sources{format}`
- endpoint added
### `POST /{administration_id}/assets/{id}/value_changes/arbitrary{format}`
- endpoint added
### `POST /{administration_id}/assets/{id}/value_changes/divestment{format}`
- endpoint added
### `POST /{administration_id}/assets/{id}/value_changes/full_depreciation{format}`
- endpoint added
### `POST /{administration_id}/assets/{id}/value_changes/manual{format}`
- endpoint added
### `DELETE /{administration_id}/assets/{id}{format}`
- endpoint added
### `GET /{administration_id}/assets/{id}{format}`
- endpoint added
### `PATCH /{administration_id}/assets/{id}{format}`
- endpoint added
### `GET /{administration_id}/assets{format}`
- endpoint added
### `POST /{administration_id}/assets{format}`
- endpoint added
## API Changelog v2-20250821- vs. v2-20250821-
### `DELETE /{administration_id}/assets/{id}/sources/{detail_id}{format}`
- api tag 'Assets' added
- api tag 'assets' removed
### `POST /{administration_id}/assets/{id}/sources{format}`
- api tag 'Assets' added
- api tag 'assets' removed
### `PATCH /{administration_id}/assets/{id}{format}`
- :warning: the 'asset' request property type/format changed from ''/'' to 'object'/''
### `POST /{administration_id}/assets{format}`
- :warning: the 'asset' request property type/format changed from ''/'' to 'object'/''
---
## Document: 2025-08-18
URL: /changelog/2025-08-18
# 2025-08-18
## API Changelog v2-20250815-fe5f60f780 vs. v2-20250818-547c1e9297
### `DELETE /{administration_id}/purchase_transactions/{id}/delete{format}`
- endpoint deprecated
---
## Document: 2025-08-15
URL: /changelog/2025-08-15
# 2025-08-15
## API Changelog v2-20250814-09c045c4a6 vs. v2-20250815-fe5f60f780
### `GET /{administration_id}/import_mappings/{type}/{id}{format}`
- endpoint deprecated
### `GET /{administration_id}/import_mappings/{type}{format}`
- endpoint deprecated
---
## Document: 2025-08-14
URL: /changelog/2025-08-14
# 2025-08-14
## API Changelog v2-20250806-b5d7b958e4 vs. v2-20250814-09c045c4a6
### `GET /administrations{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/contacts/customer_id/{customer_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from 'https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all' to '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `GET /{administration_id}/contacts/filter{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- the '/items/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from 'https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all' to '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `GET /{administration_id}/contacts/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/contacts/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- the '/items/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from 'https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all' to '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `DELETE /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/contacts/{contact_id}/contact_people/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/contacts/{contact_id}/contact_people{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate/url{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/contacts/{contact_id}/moneybird_payments_mandate{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/contacts/{contact_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/contacts/{contact_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/contacts/{id}/additional_charges{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/contacts/{id}/additional_charges{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/contacts/{id}/archive{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/contacts/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/contacts/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from 'https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all' to '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `PATCH /{administration_id}/contacts/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from 'https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all' to '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `GET /{administration_id}/contacts{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- the '/items/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from 'https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all' to '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '200'
### `POST /{administration_id}/contacts{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- the '/allOf[#/components/schemas/base_contact_response]/sales_invoices_url' response's property pattern was changed from 'https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all' to '^https:\/\/moneybird\.\w{3}\/\d+\/sales_invoices\/[a-f0-9]{64}\/all$' for the status '201'
### `GET /{administration_id}/custom_fields{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/document_styles{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_documents/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_documents/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/general_documents/{general_document_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_documents/{general_document_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_documents/{id}/attachments/{attachment_id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/general_documents/{id}/attachments/{attachment_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_documents/{id}/attachments{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `DELETE /{administration_id}/documents/general_documents/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_documents/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/documents/general_documents/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_documents{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_documents{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_journal_documents/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_journal_documents/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/general_journal_documents/{general_journal_document_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_journal_documents/{general_journal_document_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_journal_documents/{id}/attachments/{attachment_id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/general_journal_documents/{id}/attachments/{attachment_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_journal_documents/{id}/attachments{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `DELETE /{administration_id}/documents/general_journal_documents/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_journal_documents/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/documents/general_journal_documents/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/general_journal_documents{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/general_journal_documents{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/purchase_invoices/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/purchase_invoices/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/purchase_invoices/{id}/attachments/{attachment_id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/purchase_invoices/{id}/attachments/{attachment_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/purchase_invoices/{id}/attachments{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `DELETE /{administration_id}/documents/purchase_invoices/{id}/payments/{payment_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/purchase_invoices/{id}/payments{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/documents/purchase_invoices/{id}/register_payment{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/purchase_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/purchase_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/documents/purchase_invoices/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'purchase_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'purchase_invoice/details_attributes' request property 'oneOf' list
### `DELETE /{administration_id}/documents/purchase_invoices/{purchase_invoice_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/purchase_invoices/{purchase_invoice_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/purchase_invoices{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/purchase_invoices{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'purchase_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'purchase_invoice/details_attributes' request property 'oneOf' list
### `GET /{administration_id}/documents/receipts/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/receipts/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/receipts/{id}/attachments/{attachment_id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/receipts/{id}/attachments/{attachment_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/receipts/{id}/attachments{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `DELETE /{administration_id}/documents/receipts/{id}/payments/{payment_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/receipts/{id}/payments{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/documents/receipts/{id}/register_payment{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/receipts/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/receipts/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/documents/receipts/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'receipt/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'receipt/details_attributes' request property 'oneOf' list
### `DELETE /{administration_id}/documents/receipts/{receipt_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/receipts/{receipt_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/receipts{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/receipts{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'receipt/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'receipt/details_attributes' request property 'oneOf' list
### `GET /{administration_id}/documents/typeless_documents/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/typeless_documents/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/typeless_documents/{id}/attachments/{attachment_id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/documents/typeless_documents/{id}/attachments/{attachment_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/typeless_documents/{id}/attachments{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `DELETE /{administration_id}/documents/typeless_documents/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/typeless_documents/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/documents/typeless_documents{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/documents/typeless_documents{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/estimates/find_by_estimate_id/{estimate_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/estimates/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/estimates/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/estimates/{estimate_id}/attachments/{id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/estimates/{estimate_id}/attachments/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/estimates/{estimate_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/estimates/{estimate_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/estimates/{id}/attachments{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `PATCH /{administration_id}/estimates/{id}/bill_estimate{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/estimates/{id}/change_state{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/estimates/{id}/download_pdf{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/estimates/{id}/send_estimate{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/estimates/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/estimates/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/estimates/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'estimate/details_attributes' request property 'oneOf' list
- the 'estimate/details_attributes' request property type/format was generalized from 'object'/'' to ''/''
### `GET /{administration_id}/estimates{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/estimates{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'estimate/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'estimate/details_attributes' request property 'oneOf' list
### `POST /{administration_id}/external_sales_invoices/attachment{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `GET /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/attachments/{id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the non-success response with the status '302'
### `DELETE /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/attachments/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/payments/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/external_sales_invoices/{external_sales_invoice_id}/payments{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/external_sales_invoices/{id}/attachment{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `PATCH /{administration_id}/external_sales_invoices/{id}/mark_as_dubious{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/external_sales_invoices/{id}/mark_as_uncollectible{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/external_sales_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/external_sales_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/external_sales_invoices/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'external_sales_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'external_sales_invoice/details_attributes' request property 'oneOf' list
### `GET /{administration_id}/external_sales_invoices{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/external_sales_invoices{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'external_sales_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'external_sales_invoice/details_attributes' request property 'oneOf' list
### `GET /{administration_id}/financial_accounts{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/financial_mutations/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/financial_mutations/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/financial_mutations/{id}/link_booking{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/financial_mutations/{id}/unlink_booking{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/financial_mutations/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/financial_mutations{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/financial_statements/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/financial_statements/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/financial_statements{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/identities/default{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/identities/default{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/identities/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/identities/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/identities/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/identities{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/identities{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/import_mappings/{type}/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/import_mappings/{type}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/ledger_accounts/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/ledger_accounts/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/ledger_accounts/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/ledger_accounts{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/ledger_accounts{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: added the pattern '^\d+$' to the request property 'ledger_account/account_id'
- :warning: the 'ledger_account/account_id' request property type/format changed from 'string'/'' to 'string, integer'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/payments/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/products/identifier/{identifier}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/products/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/products/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/products/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/products{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/products{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/projects/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/projects/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/projects/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2, subschema #3' to the 'project/budget' request property 'oneOf' list
- the 'project/budget' request property type/format was generalized from 'string'/'' to ''/''
### `GET /{administration_id}/projects{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/projects{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2, subschema #3' to the 'project/budget' request property 'oneOf' list
- the 'project/budget' request property type/format was generalized from 'string'/'' to ''/''
### `DELETE /{administration_id}/purchase_transactions/{id}/delete{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/purchase_transactions/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/purchase_transactions/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/purchase_transactions{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/recurring_sales_invoices/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/recurring_sales_invoices/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/recurring_sales_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/recurring_sales_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/recurring_sales_invoices/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'recurring_sales_invoice/details_attributes' request property 'oneOf' list
- :warning: the 'recurring_sales_invoice/contact_person_id' request property type/format changed from 'string, integer'/'' to 'string, integer, null'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'recurring_sales_invoice/details_attributes' request property 'oneOf' list
### `DELETE /{administration_id}/recurring_sales_invoices/{recurring_sales_invoice_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/recurring_sales_invoices/{recurring_sales_invoice_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/recurring_sales_invoices{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/recurring_sales_invoices{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'recurring_sales_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'recurring_sales_invoice/details_attributes' request property 'oneOf' list
### `GET /{administration_id}/sales_invoices/find_by_invoice_id/{invoice_id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/sales_invoices/find_by_reference/{reference}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices/send_reminders{format}`
- :warning: added the new required request property 'sales_invoice_reminders/items/contact_id'
- :warning: added the new required request property 'sales_invoice_reminders/items/document_style_id'
- :warning: added the new required request property 'sales_invoice_reminders/items/identity_id'
- :warning: added the new required request property 'sales_invoice_reminders/items/sales_invoice_ids'
- :warning: added the new required request property 'sales_invoice_reminders/items/workflow_id'
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'sales_invoice_reminders/items/delivery_method'
- added the new optional request property 'sales_invoice_reminders/items/reminder_text'
### `GET /{administration_id}/sales_invoices/synchronization{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices/synchronization{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices/{id}/attachments{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added the new optional request property 'file'
### `GET /{administration_id}/sales_invoices/{id}/download_packing_slip_pdf{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/sales_invoices/{id}/download_pdf{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/sales_invoices/{id}/download_ubl{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/sales_invoices/{id}/duplicate_creditinvoice{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/sales_invoices/{id}/mark_as_dubious{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/sales_invoices/{id}/mark_as_uncollectible{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices/{id}/pause{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/sales_invoices/{id}/register_payment_creditinvoice{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/sales_invoices/{id}/register_payment{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices/{id}/resume{format}`
- :warning: the request's body type/format changed from 'string'/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/sales_invoices/{id}/send_invoice{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/sales_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/sales_invoices/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/sales_invoices/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'sales_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'sales_invoice/details_attributes' request property 'oneOf' list
### `GET /{administration_id}/sales_invoices/{sales_invoice_id}/attachments/{id}/download{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/sales_invoices/{sales_invoice_id}/attachments/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/sales_invoices/{sales_invoice_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices/{sales_invoice_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/sales_invoices/{sales_invoice_id}/payments/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices/{sales_invoice_id}/payments{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/sales_invoices{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/sales_invoices{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'sales_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'sales_invoice/details_attributes' request property 'oneOf' list
### `GET /{administration_id}/subscription_templates/{id}/checkout_identifier{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/subscription_templates{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/subscriptions/{id}/additional_charges{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/subscriptions/{id}/additional_charges{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/subscriptions/{id}/create_and_schedule_one_off_sales_invoice{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: removed 'subschema #1, subschema #2' from the 'sales_invoice/details_attributes' request property 'oneOf' list
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
- added 'subschema #1, subschema #2' to the 'sales_invoice/details_attributes' request property 'oneOf' list
### `DELETE /{administration_id}/subscriptions/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/subscriptions/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/subscriptions/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: added the pattern '^\d+$' to the request property 'subscription/contact_person_id'
- :warning: the 'subscription/contact_person_id' request property type/format changed from 'string'/'' to 'string, integer, null'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/subscriptions{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/subscriptions{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/tax_rates{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/time_entries/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/time_entries/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `PATCH /{administration_id}/time_entries/{id}{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/time_entries/{time_entry_id}/notes/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/time_entries/{time_entry_id}/notes{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/time_entries{format}`
- :warning: added the pattern '^\d+$' to the 'query' request parameter 'per_page'
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/time_entries{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/users{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/verifications{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `DELETE /{administration_id}/webhooks/{id}{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/webhooks{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `POST /{administration_id}/webhooks{format}`
- :warning: the request's body type/format changed from ''/'' to 'object'/''
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
### `GET /{administration_id}/workflows{format}`
- :warning: changed the pattern of the 'path' request parameter 'format' from '(.(json|xml))?' to '^(.(json|xml))?$'
---
## Document: 2025-07-04
URL: /changelog/2025-07-04
# 2025-07-04
* The product_id parameter is added to [`GET /subscription_templates/:id/checkout_identifier`](https://developer.moneybird.com/api/subscription_templates/#get_subscription_templates_id_checkout_identifier) to skip the product selection.
* include_api_users is added to [`GET /users`](https://developer.moneybird.com/api/users/#get_users) to also return the api users within the administration.
---
## Document: 2025-05-08
URL: /changelog/2025-05-08
# 2025-05-08
* The `PATCH` endpoint to 'archive' a contact is now available: [`PATCH /contacts/:id/archive`](/api/contacts/#patch_contacts_id_archive).
---
## Document: 2025-04-17
URL: /changelog/2025-04-17
# 2025-04-17
* Deprecation of `detail_id` in the Time Entries API
* The `detail_id` attribute on time entry entities will be deprecated in the coming weeks and be removed after 2025-07-31.
* POST requests `:administration_id/time_entries` accept a `sales_invoice_id`, which will be enabled in the coming weeks.
* PATCH requests `:administration_id/time_entries/:id` accept a `sales_invoice_id`, which will be enabled in the coming weeks.
* GET requests `:administration_id/time_entries` now return both a `sales_invoice` and `detail` until 2025-07-31.
* Added endpoint to bulk delete Purchase Transactions
* `POST /purchase_transactions/collections`
* Added REST-ful endpoint to delete single Purchase Transaction
* `DELETE /purchase_transactions/:id`
* The existing `DELETE /purchase_transactions/:id/delete` will be deprecated in the future.
---
## Document: 2025-03-28
URL: /changelog/2025-03-28
# 2025-03-28
* The `Users` endpoint now contains an additional parameter `include_inactive` for including inactive users. These users will have limited information.
---
## Document: 2024-09-30
URL: /changelog/2024-09-30
# 2024-09-30
* Deprecation of `events` in the Webhook API
* The `events` attribute on webhook entities is considered deprecated and is replaced by `enabled_events`, starting January 1st 2025 `events` will be removed and will no longer be accepted.
* POST requests `:administration_id/webhooks` now accept `enabled_events` instead of `events`.
* GET requests `:administration_id/webhooks/:id` now return both `events` and `enabled_events`, until January 1st 2025.
* New endpoint `/contacts/:contact_id/moneybird_payments_mandate/url` to obtain a link that can be used to directly request a Moneybird Payments mandate for a contact.
---
## Document: 2024-03-24
URL: /changelog/2024-03-24
# 2024-03-24
* The ledger account GET endpoints now include the linked taxonomy item.
* The parameter 'rgs_code' is now available to the ledger account POST and PATCH endpoints. This parameter is optional for now. IMPORTANT: Creating ledger accounts without taxonomy item is now deprecated. From 01-07-2024 forward it will not longer be possible to create ledger accounts without providing a taxonomy item code based on the [RGS standard](https://www.referentiegrootboekschema.nl/definitieve-versie-rgs-35).
---
## Document: 2024-03-21
URL: /changelog/2024-03-21
# 2024-03-21
* The API now includes a fresh addition titled SubscriptionTemplates, designed for facilitating online subscription sales. This feature empowers customers by enabling them to independently manage their subscriptions and payment information.
* The API facilitates accessing SubscriptionTemplates and generating online sales links. These links allow for pre-setting the contact and start date parameters for the subscription.
---
## Document: 2023-08-10
URL: /changelog/2023-08-10
# 2023-08-10
* Webhooks and objects containing ledger account bookings will now include the corresponding `financial_mutation_id`
* Obtainining a single financial mutation is now available via `GET /financial_mutations/:id`
* Do not use this endpoint for obtaining multiple financial mutations in a short time frame, as you hit the rate limit very quickly. Use the synchronization endpoints instead.
---
## Document: 2023-07-27
URL: /changelog/2023-07-27
# 2023-07-27
* Downloading of attachments via the API is now available for the following attachables:
* Sales invoice: [`GET /sales_invoices/:id/attachments/:attachment_id/download`](/api/sales_invoices/#get_sales_invoices_sales_invoice_id_attachments_id_download)
* Estimate: [`GET /estimates/:id/attachments/:attachment_id/download`](/api/estimates/#get_estimates_estimate_id_attachments_id/download)
* External sales invoice: [`GET /external_sales_invoices/:id/attachments/:attachment_id/download`](/api/external_sales_invoices/#get_external_sales_invoices_external_sales_invoice_id_attachments_id_download)
* Document:
* General document: [`GET /documents/general_documents/:id/attachments/:attachment_id/download`](/api/documents_general_documents/#get_documents_general_documents_id_attachments_attachment_id_download)
* General journal document: [`GET /documents/general_journal_documents/:id/attachments/:attachment_id/download`](/api/documents_general_journal_documents/#get_documents_general_journal_documents_id_attachments_attachment_id_download)
* Purchase invoice: [`GET /documents/purchase_invoices/:id/attachments/:attachment_id/download`](/api/documents_purchase_invoices/#get_documents_purchase_invoices_id_attachments_attachment_id_download)
* Receipt: [`GET /documents/receipts/:id/attachments/:attachment_id/download`](/api/documents_receipts/#get_documents_receipts_id_attachments_attachment_id_download)
* Typeless document: [`GET /documents/typeless_documents/:id/attachments/:attachment_id/download`](/api/documents_typeless_documents/#get_documents_typeless_documents_id_attachments_attachment_id_download)
---
## Document: 2023-05-09
URL: /changelog/2023-05-09
# 2023-05-09
* The `GET` endpoint for an 'additional_charge' of a contact is now available: [`GET /contacts/:id/additional_charges`](/api/contacts/#get_contacts_id_additional_charges).
* The `POST` endpoint for an 'additional_charge' of a contact is now available: [`POST /contacts/:id/additional_charges`](/api/contacts/#post_contacts_id_additional_charges).
---
## Document: 2022-12-16
URL: /changelog/2022-12-16
# 2022-12-16
* Contact people have been added to recurring sales invoices and subscriptions.
---
## Document: 2022-10-31
URL: /changelog/2022-10-31
# 2022-10-31
* The `GET` endpoint for an 'additional_charge' is now available: [`GET /subscriptions/:id/additional_charges`](/api/subscriptions/#get_subscriptions_id_additional_charges).
* The deletion of an attachment via the API is now available for the following attachables:
* Sales invoice: [`DELETE /sales_invoices/:id/attachments/:attachment_id`](/api/sales_invoices/#delete_sales_invoices_sales_invoice_id_attachments_id)
* Estimate: [`DELETE /estimates/:id/attachments/:attachment_id`](/api/estimates/#delete_estimates_estimate_id_attachments_id)
* External sales invoice: [`DELETE /external_sales_invoices/:id/attachments/:attachment_id`](/api/external_sales_invoices/#delete_external_sales_invoices_external_sales_invoice_id_attachments_id)
* Document:
* General document: [`DELETE /documents/general_documents/:id/attachments/:attachment_id`](/api/documents_general_documents/#delete_documents_general_documents_id_attachments_attachment_id)
* General journal document: [`DELETE /documents/general_journal_documents/:id/attachments/:attachment_id`](/api/documents_general_journal_documents/#delete_documents_general_journal_documents_id_attachments_attachment_id)
* Purchase invoice: [`DELETE /documents/purchase_invoices/:id/attachments/:attachment_id`](/api/documents_purchase_invoices/#delete_documents_purchase_invoices_id_attachments_attachment_id)
* Receipt: [`DELETE /documents/receipts/:id/attachments/:attachment_id`](/api/documents_receipts/#delete_documents_receipts_id_attachments_attachment_id)
* Typeless document: [`DELETE /documents/typeless_documents/:id/attachments/:attachment_id`](/api/documents_typeless_documents/#delete_documents_typeless_documents_id_attachments_attachment_id)
---
## Document: 2022-09-05
URL: /changelog/2022-09-05
# 2022-09-05
* The 'delivery_method' `Post` for the endpoint [`PATCH /sales_invoices/:id/send_invoice`](/api/sales_invoices/#patch_sales_invoices_id_send_invoice) is now deprecated. From 01-01-2023 forward it will no longer be available
* The field 'end_to_end_id' in the response of a `purchase_transaction` on the endpoint [`GET /purchase_transactions/get_purchase_transactions`](/api/purchase_transactions/#get_purchase_transactions) is now deprecated and will be replaced with the field `description`. As of now the 'description' field is available so you can make the transition if you use this field.
---
## Document: 2022-04-12
URL: /changelog/2022-04-12
# 2022-04-12
* We've added the `/moneybird_payments_mandate` resource on a contact. This allows you to request and delete Moneybird Payment mandates for your contacts. Read more about these endpoints:
* [`GET /contacts/:contact_id/moneybird_payments_mandate`](/api/contacts/#get_contacts_contact_id_moneybird_payments_mandate)
* [`POST /contacts/:contact_id/moneybird_payments_mandate`](/api/contacts/#post_contacts_contact_id_moneybird_payments_mandate)
* [`DELETE /contacts/:contact_id/moneybird_payments_mandate`](/api/contacts/#delete_contacts_contact_id_moneybird_payments_mandate)
---
## Document: 2022-02-01
URL: /changelog/2022-02-01
# 2022-02-01
* We've added `manual_payment_action` and `linked_payment_id` attributes to a `Payment` object in the API and webhooks. This makes it possible to find out how a payment is linked in the adminsitration.
---
## Document: 2021-12-3
URL: /changelog/2021-12-3
# 2021-12-3
* We've added new api endpoints under `/contacts` to manage contact people. [Read more in the contacts API documentation](/api/contacts/).
---
## Document: 2021-12-23
URL: /changelog/2021-12-23
# 2021-12-23
* We've updated the api endpoint [`GET /contacts/filter`](/api/contacts/#get_contacts_filter) to also take contact people into consideration when filtering.
---
## Document: 2021-08-10
URL: /changelog/2021-08-10
# 2021-08-10
We introduced two new fields:
- `recurring_sales_invoice_id`: We've added the `recurring_sales_invoice_id` field to any response containing a subscription.
- `subscription`: We've added the `subscription` field to any response containing a recurring_sales_invoice.
---
## Document: 2021-07-29
URL: /changelog/2021-07-29
# 2021-07-29
We've added the `journal_type` field to any response containing a general journal document.
---
## Document: 2021-07-27
URL: /changelog/2021-07-27
# 2021-07-27
We introduced two new fields for products:
- `identifier`: a unique identifier for your products, for example for productnumbers or SKU codes. When products have an identifier, you can find them using the new endpoint: `GET /products/identifier/:identifier`.
- `title`: an extra title for products besides their `description`. Used in the new checkout feature.
---
## Document: 2021-07-06
URL: /changelog/2021-07-06
# 2021-07-06
- We've added the mandatory tax text to details entities.
---
## Document: 2021-06-29
URL: /changelog/2021-06-29
# 2021-06-29
* We've made it possible to filter results from the [`GET /tax_rates`](/api/tax_rates/#get_tax_rates) endpoint. You can filter on important attributes of a tax rate, such as name, country and percentage.
---
## Document: 2021-04-20
URL: /changelog/2021-04-20
# 2021-04-20
* We've added a new filter option `reference` in the [`GET /sales_invoices`](/api/sales_invoices/#get_sales_invoices) endpoint.
---
## Document: 2021-01-08
URL: /changelog/2021-01-08
# 2021-01-08
* We've added a new filter endpoint for contacts. you can find these and the possible filter options at [`GET /contacts/filter`](/api/contacts/#get_contacts_filter)
* The [`GET /contacts/synchronization`](/api/contacts/#get_contacts_synchronization) endpoint also includes these filter options. You can filter on `created_after`, `updated_after`, `first_name` and `last_name`.
---
## Document: 2020-10-27
URL: /changelog/2020-10-27
# 2020-10-27
* We've added new filter options `created_after` and `updated_after` in the [`GET /sales_invoices`](/api/sales_invoices/#get_sales_invoices) and the [`GET /sales_invoices/synchronization`](/api/sales_invoices/#get_sales_invoices_synchronization) endpoint. It is now possible to retrieve sales invoices created or updated after a given timestamp.
---
## Document: 2020-08-26
URL: /changelog/2020-08-26
# 2020-08-26
* We've added `/sales_invoices/:id/download_packing_slip_pdf` to sales invoices. [Read more in the sales invoices API documentation](/api/sales_invoices/#get_sales_invoices_id_download_packing_slip_pdf).
---
## Document: 2020-08-11
URL: /changelog/2020-08-11
# 2020-08-11
* We've added the `ledger_account_id` to a payment entity, so it is now clear to which ledger account a payment is booked on. This applies to payments registered to all document types, sales invoices and external sales invoices.
* We've added the option to select a payment method when registering a payment.
---
## Document: 2020-07-15
URL: /changelog/2020-07-15
# 2020-07-15
* We've added `/sales_invoices/:id/mark_as_dubious` to sales invoices. [Read more in the sales invoices API documentation](/api/sales_invoices/#patch_sales_invoices_id_mark_as_dubious).
* We've added `/external_sales_invoices/:id/mark_as_dubious` to external sales invoices. [Read more in the external sales invoices API documentation](/api/external_sales_invoices/#patch_external_sales_invoices_id_mark_as_dubious).
* We've added `/external_sales_invoices/:id/mark_as_uncollectible` to external sales invoices. [Read more in the external sales invoices API documentation](/api/external_sales_invoices/#patch_external_sales_invoices_id_mark_as_uncollectible).
---
## Document: 2020-07-06
URL: /changelog/2020-07-06
# 2020-07-06
* We've added `/notes` to purchase invoices. [Read more in the purchase_transactions API documentation](/api/documents_purchase_invoices/).
* We've added `/notes` to general documents. [Read more in the general_documents API documentation](/api/documents_general_documents/).
* We've added `/notes` to general journal documents. [Read more in the general_journal_documents API documentation](/api/documents_general_journal_documents/).
* We've added `/notes` to receipts. [Read more in the receipts API documentation](/api/documents_receipts/).
---
## Document: 2020-06-23
URL: /changelog/2020-06-23
# 2020-06-23
* We've added an extra endpoint `/time_entries` to manage time entries. [Read more in the time entries API documentation](/api/time_entries/).
* We've added an extra endpoint `/users` for listing active users. [Read more in the users API documentation](/api/users/).
---
## Document: 2020-06-03
URL: /changelog/2020-06-03
# 2020-06-03
* We've added an extra scope `time_entries`, the time_entries API isn't available yet. [Read more about scopes in the authentication documentation](authentication/#scopes).
---
## Document: 2020-04-08
URL: /changelog/2020-04-08
# 2020-04-08
* We've added an extra endpoint `/notes` to recurring sales invoices for managing notes. [Read more in the recurring sales invoice API documentation](/api/recurring_sales_invoices/#post_recurring_sales_invoices_recurring_sales_invoice_id_notes).
---
## Document: 2020-03-03
URL: /changelog/2020-03-03
# 2020-03-03
* We've added extra rate-limit headers when the request is throttled. See [throttling](/#throttling) for an explanation of the contents of those headers.
---
## Document: 2020-02-26
URL: /changelog/2020-02-26
# 2020-02-26
* We've added an `/verifications` endpoint for requesting the verifications of an administration. [Read more in the verifications API documentation](/api/verifications).
---
## Document: 2020-01-15
URL: /changelog/2020-01-15
# 2020-01-15
* We've added an official `/download_ubl` endpoint to support sales invoice UBL downloads . [Read more in the sales invoice API documentation](/api/sales_invoices/#get_sales_invoices_id_download_ubl).
---
## Document: 2019-11-25
URL: /changelog/2019-11-25
# 2019-11-25
* External sales invoices will now be created with state 'open' instead of 'new'. This is consistent with the create endpoints for sales invoices and documents.
---
## Document: 2019-11-19
URL: /changelog/2019-11-19
# 2019-11-19
* We have added a `transaction_identifier` field to `payments`. This allows you to store the identifier of a Payment Service Provider transaction. If you use Mollie for payments, the identifier will be used to automatically link the payments to the pay out of Mollie on your bank account.
---
## Document: 2019-11-14
URL: /changelog/2019-11-14
# 2019-11-14
* We've added an `/projects` endpoint to manage projects. [Read more in the projects API documentation](/api/projects/). Projects can be added to sales invoices, external sales invoices, documents and estimates.
---
## Document: 2019-11-13
URL: /changelog/2019-11-13
# 2019-11-13
* We've added an `/external_sales_invoices` endpoint to manage external sales invoices. [Read more in the external sales invoice API documentation](/api/external_sales_invoices/).
---
## Document: 2019-10-22
URL: /changelog/2019-10-22
# 2019-10-22
* We officially support PDF downloads of sales invoices and estimates through a new API endpoint called "download_pdf". The users that are currently using an unofficial workaround should migrate to the new endpoints by the end of this year.
---
## Document: 2019-09-30
URL: /changelog/2019-09-30
# 2019-09-30
* From December 1st onward, sending invoices and estimates will no longer be possible if the email address in the sending address has not been verified. Read more about this in our [blog](https://www.moneybird.nl/blog/verifieer-je-e-mailadres/). The resulting http statuscode when trying to send without a verified sending addresses will be 400, with the in the body the error message "sending address not verified".
---
## Document: 2019-08-26
URL: /changelog/2019-08-26
# 2019-08-26
* The `custom_fields_attributes` and `details_attributes` fields are now all consistent with each other. This simplifies the mapping of there between different endpoints. It has changed from `custom_fields_attributes[*][id]` to `custom_fields_attributes[id]`.
---
## Document: 2019-08-08
URL: /changelog/2019-08-08
# 2019-08-08
* Webhooks now have a unique secret key, given in the 'token' field on creation. This token is also given with each webhook call in the 'webhook_token' field. It can be used to verify that the webhook call comes from Moneybird.
---
## Document: 2019-07-18
URL: /changelog/2019-07-18
# 2019-07-18
* We reversed the July 4th change because it was causing a lot of trouble for developers. We will again return the URL for viewing the invoice online, even though users won't be able to use it until the invoice has been sent. We have updated the documentation for sales invoices to clarify the existing behaviour.
---
## Document: 2019-07-04
URL: /changelog/2019-07-04
# 2019-07-04
* ~~When retrieving a sales invoice object the url field will be empty as long as the sales invoice has not been sent, as the url is unreachable when the invoice is not sent. When sending the invoice through the api the url will be returned.~~
---
## Document: 2019-05-21
URL: /changelog/2019-05-21
# 2019-05-21
* Instead of responding with only `200` we now return the resulting object data on sending sales invoices or estimates through the `/sales_invoices/:id/send_invoice` and `/estimates/:id/send_estimate` endpoints.
---
## Document: 2019-03-06
URL: /changelog/2019-03-06
# 2019-03-06
On April 3th a change to the api will be made.
* When creating a new contact without specifying a value for `email_ubl`, the email UBL attachment setting from the administration will be used instead of a default value of `true`. The value for sending UBL attachment can be set in Moneybird via `Settings > Simplerinvoicing & UBL > UBL as e-mail attachment`. By default this value is set to `true`.
---
## Document: 2018-08-24
URL: /changelog/2018-08-24
# 2018-08-24
On October 24th some changes to the api will be made.
* When making a recurring sales invoice or an estimate, it is possible to enter a workflow via the ‘workflow_id’ field. If this field is not entered, the default workflow from the administration will be used. This is inconsistent with the behaviour on our website and app, there the default invoice- and estimate-workflow of the contact will be chosen first. If the contact doesn’t have a default workflow, the default workflow from the administration will be chosen after all. To make consistent behaviour, we will also implement this behavior in the API.
* Recently we added a public view code to your sales invoices and estimates. Sales invoices end estimates are only visible for the recipient when they provide this code. So far the use of this code was not needed for invoices and estimates created by the API, but this will change. If you use the API to point you clients to their invoices using the ‘url’ field, you should also provide the public view code for security. New sales invoices and estimates return a ‘public_view_code’ in the API payload. For old sales invoices and estimates, clients can use the invoice or estimate id.
---
## Document: 2018-07-11
URL: /changelog/2018-07-11
# 2018-07-11
* Sales invoices and estimates are now only visible for the recipient when they provide an public view code. If you use the API to point your clients to their invoices online using the `url` field, you should also provide the public view code for security. New sales invoices and estimates now return a `public_view_code` in the API payload. For old sales invoices and estimates, clients can use the invoice or estimate id to view the document.
---
## Document: 2018-01-16
URL: /changelog/2018-01-16
# 2018-01-16
* Because of new tax regulations, it is no longer possible to specify a `book_method` when marking a sales invoice as uncollectible. All uncollectible invoices will be booked as uncollectible revenue from now on.
---
## Document: 2017-08-15
URL: /changelog/2017-08-15
# 2017-08-15
* We fixed a bug that allowed payments to be registered for draft sales invoices. An invoice has to have been sent before payments can be registered.
---
## Document: 2017-07-14
URL: /changelog/2017-07-14
# 2017-07-14
* We have added the field `tax_number_valid` to the contacts entity.
---
## Document: 2017-06-28
URL: /changelog/2017-06-28
# 2017-06-28
* We have added an endpoint to change the state of an estimate `/estimates/:id/change_state`
* Added an endopint to bill an estimate `/estimates/:id/bill_estimate`
See the [Estimates documentation](http://developer.moneybird.com/api/estimates) for more information.
---
## Document: 2017-03-27
URL: /changelog/2017-03-27
# 2017-03-27
We've extended the functionality of webhooks by adding the possibility to subscribe to events. You can now choose
which events you would like to recieve a notification from, by adding an array with the names of the events to the data. See [webhooks](http://developer.moneybird.com/webhooks) for more information.
If you decide to not subscribe to any events the old implementation will be used (notifications after state changes of sales invoices). This is to prevent existing webhooks from failing.
---
## Document: 2016-11-18
URL: /changelog/2016-11-18
# 2016-11-18
Webhooks now return our long integer IDs as strings to avoid issues with JSON parsing tools. The API was already doing this as well.
---
## Document: 2016-10-26
URL: /changelog/2016-10-26
# 2016-10-26
* All lists of entities are now equipped with pagination. Use the `page` and `per_page` arguments to control the pagination. A response contains a `Link` header with a `next` and `prev` link. Read more about [pagination](http://developer.moneybird.com/#pagination).
---
## Document: 2016-10-13
URL: /changelog/2016-10-13
# 2016-10-13
* Filtering can now be used when listing recurring sales invoices. A sync API has also been implemented for recurring sales invoices. See the [recurring sales invoices documentation](/api/recurring_sales_invoices/) for more information.
---
## Document: 2016-10-11
URL: /changelog/2016-10-11
# 2016-10-11
* Assigning a nonexistent custom field to a contact, estimate, (recurring) sales invoice or identity now returns a `404` HTTP response with a helpful error message instead of a generic `500` error.
* In many error cases the error response hash now also contains a `symbolic` entry with machine readable error details. See the [documentation](/api/sales_invoices/#post_sales_invoices_example1) for an example.
---
## Document: 2016-08-18
URL: /changelog/2016-08-18
# 2016-08-18
* After deleting an entity, the API will now return a `204 No content` response without a body. This conforms to the [RFC2616 standards](https://tools.ietf.org/html/rfc2616#section-9.7).
---
## Document: 2016-07-28
URL: /changelog/2016-07-28
# 2016-07-28
* All entities that belong to a specific administration now return their `administration_id` field in API responses.
* The [contact list](/api/contacts/#get_contacts) now returns the documented 100 contacts, instead of 50.
* Documentation has been improved for [SalesInvoice](/api/sales_invoices/#get_sales_invoices) and [Estimate](/api/estimates/#get_estimates) filtering.
* [Deleting a contact](/api/contacts/#delete_contacts_id) will now return a `422` HTTP code when deleting failed. Deleting can fail when a contact is still used within the bookkeeping.
---
## Document: 2016-03-23
URL: /changelog/2016-03-23
# 2016-03-23
* [Documents](/api/documents_purchase_invoices/#get_documents_purchase_invoices_id) now include a nested representation of the contact they're atttached to.
* The `events` attribute was added to a lot of entities. These events represent the history items shown in the MoneyBird web interface. For example, an event containing `action: sales_invoice_send_email` will tell you the time at which an invoice was sent by email and to whom it was sent.
---
## Document: 2016-03-10
URL: /changelog/2016-03-10
# 2016-03-10
When creating a [sales_invoice](/api/sales_invoices) without giving a workflow id, MoneyBird will try to find a default invoice id saved at the contact first before using the administration default.
It's no longer possible to use the `email` attribute when creating or updating [contacts](/api/contacts). You'll need to use the `send_invoices_to_email` and `send_estimates_to_email` attributes instead.
It's no longer possible to use the `attention` attribute when creating or updating [contacts](/api/contacts). You'll need to use the `send_invoices_to_attention` and `send_estimates_to_attention` attributes instead.
---
## Document: 2015-11-24
URL: /changelog/2015-11-24
# 2015-11-24
Many JSON parsing tools out of the box don't work well with our long integer IDs. Therefore we've updated the API to always return these IDs as strings instead.
---
## Document: 2015-11-10
URL: /changelog/2015-11-10
# 2015-11-10
We've added an `/estimates` endpoint to manage estimates. It includes all functions from the old API, and several new ones. It has been developed to be consistent with `/sales_invoices`. [Read more in the estimates API documentation](/api/estimates/).
A `due_date` attribute has been added to sales invoices. This attribute also exists for estimates.
---
## Document: 2015-10-19
URL: /changelog/2015-10-19
# 2015-10-19
All endpoints for syncing now accept a `filter` parameter to fetch a subset of the full set of entities for syncing. The `filter` parameter accepts the same arguments as the `filter` used for the regular endpoints.
Examples:
* [Sales invoices](/api/sales_invoices/#get_sales_invoices_synchronization_example1)
* [Purchase invoices](/api/documents_purchase_invoices/#get_documents_purchase_invoices_synchronization_example1)
* [Receipts](/api/documents_receipts/#get_documents_receipts_synchronization_example1)
* [General journal documents](/api/documents_general_journal_documents/#get_documents_general_journal_documents_synchronization_example1)
* [General documents](/api/documents_general_documents/#get_documents_general_documents_synchronization_example1)
* [Financial mutations](/api/financial_mutations/#get_financial_mutations_synchronization_example1)
---
## Document: 2015-10-14
URL: /changelog/2015-10-14
# 2015-10-14
We have added a new endpoint for retrieving a contact by customer id. [Read more in the documentation.](/api/contacts/#get_contacts_customer_id_customer_id)
---
## Document: 2015-10-02
URL: /changelog/2015-10-02
# 2015-10-02
We have improved the management of API tokens and OAuth applications. On the new developer page in your user account, you can find:
- Register new OAuth applications for external applications
- Register a personal OAuth API token for personal user
- Subscribe to our API newsletter to keep informed about API changes
---
## Document: 2015-03-23
URL: /changelog/2015-03-23
# 2015-03-23
The `send_method` attribute on [contacts](/api/contacts) has been replaced by the `delivery_method` attribute. The possible values are also slightly different:
`Email`
: Send invoices to contact via email.
`Post`
: Send invoices to contact via postal system.
`Manual`
: Just mark invoices send to contact as sent.
---
## Document: 2015-02-25
URL: /changelog/2015-02-25
# 2015-02-25
We have added a new [webhook](/webhooks) feature to the API. More information is available in the documentation.
---
## Document: 2015-02-05
URL: /changelog/2015-02-05
# 2015-02-05
The `timeline` scope for [authentication](/authentication) is removed from our application. An update to your authentication process is needed to enforce the new default scope `sales_invoices`. This should be an one-time change.
---
## Document: 2015-01-07
URL: /changelog/2015-01-07
# 2015-01-07
We have extended the API with an endpoint for [import mappings](/api/import_mappings). With the move from the old MoneyBird to the new MoneyBird, all ids of entities in an administration have changed. Some API developers might have saved old ids in their database. In order for them to keep querying our API with the right ids, we have added an API for the import mappings. By querying the import mapping API, you can transform old ids to new ids in the new MoneyBird. This should be a one-time conversion, the import mapping endpoint will not be indefinitely available.
Old ids can be recognized as plain autoincrement ids, usually not larger than 1.000.000. The ids in the new MoneyBird are no longer autoincrement ids, but are defined based on the time of generation in our database. The ids are therefore much longer, an example of a new id is `111433428396672003`. Make sure your application can handle these large numbers, sometimes this requires a change to your database structure or changes in JavaScript.
---
## Document: 2014-11-26
URL: /changelog/2014-11-26
# 2014-11-26
We have launched a new API for the new MoneyBird. All functions of our old API can be found in the new API. Some REST endpoints have been renamed to reflect the new MoneyBird better.
The new API is still a REST API and behaves in a comparable way as our previous API.
### Common
* HTTP Basic authentication is removed, authentication can only be done with OAuth keys. [More information](/authentication)
* JSON is the default data type for all requests and responses. XML is still available by changing the format in the path.
* The API can be found on `https://moneybird.com/api`, versioning is done in the URL. The new API has version `v2`.
* Subdomains for accessing certain administations are removed. The path to a resource contains the id of an administration: `/api/v2/:administration_id.json`
* All primary keys of entities in the API are bigints, for example 107693607045039116. Storing these ids in your own database might need special attention.
* All entities formerly present in the database will have a new primary key. When you have stored ids of entities in your own database, you need to migrate these.
### Sales invoices
* Renamed endpoint from `/invoices` to `/sales_invoices`
* The endpoints for the synchronisation API have been renamed from `/sync_list_ids` and `/sync_fetch_ids` to `/sales_invoices/synchronization`. The HTTP method makes the difference between listing and fetching.
* Changing contact information or adding contacts through the sales invoices endpoints is removed. Upon creation of a new sales invoice, a contact should be provided. This contact needs to be created with the contact endpoints.
* The attribute `description` has been renamed to `payment_conditions`
* The attribute `po-number` has been renamed to `reference`
* The attribute `recurring-template-id` has been renamed to `recurring_sales_invoice_id`
* The attribute `sepa-active` is removed, the workflow now defines the payment process of the sales invoice
* The attribute `invoice-profile-id` is removed. Invoice profiles have been replaced by document styles and workflows. A document style determines the layout of the sales invoice, the workflow determines the process for receiving a payment. Both can be set by `document_style_id` and `workflow_id`.
* Payments for sales invoices no longer store a payment method. The method of payment is determined based on the financial mutation the payment is linked to.
### Documents
* The `/incoming_invoices` endpoints have been removed in favor of a more general `/documents` endpoint. Each document type in MoneyBird has their own endpoints: [purchase invoices](/api/documents_purchase_invoices), [receipts](/api/documents_receipts), [general journal documents](/api/documents_general_journal_documents) and [general documents](/api/documents_general_documents).
### Recurring invoices
* The `/recurring_templates` endpoints have been removed in favor of `/recurring_sales_invoices`.
* The attribute `frequency-type` now accepts strings describing the frequency. Integer values are not accepted anymore.
* The attribute `invoice-profile-id` has been removed in favor of a `document_style_id` and `workflow_id`.
### Contacts
* The endpoints for the synchronisation API have been renamed from `/sync_list_ids` and `/sync_fetch_ids` to `/contacts/synchronization`. The HTTP method makes the difference between listing and fetching.
### Invoice profiles
* The `/invoice_profiles` endpoints have been removed in favor of the [workflow](/api/workflows) and [document style](/api/document_styles) endpoints.