This document tracks the differences between this PHP library and the official Moneybird OpenAPI specification.
Last Updated: 2026-07-12
OpenAPI Spec Version: v2-20260710-57729b61b9
Spec File: openapi-specs/openapi-2026-07-12.yml
New in the official spec, compared to the previous stored version:
- Task Lists (entirely new resource family, not implemented):
task_lists,task_list_groups,task_list_tasks(incl. assignment, completion, notes),task_list_templates - External Sales Invoices synchronization (
GET/POST /external_sales_invoices/synchronization) is now officially in the spec β this library already implemented it (getSynchronization()/synchronize()), so it is no longer "undocumented" - Reports: new
GET /reports/creditors_agingandGET /reports/debtors_aging - Assets: new
POST/DELETE /assets/{id}/reinvestment_reserve_purchaseand.../reinvestment_reserve_sale; the sources delete path parameter was renameddetail_idβsource_id - Time Entries: new
PATCH /time_entries/{id}/resumeandPATCH /time_entries/{id}/stop(not implemented) - Webhooks: new
PATCH /webhooks/{id}/activateandPATCH /webhooks/{id}/deactivate(not implemented) - Workflows: new
GET /workflows/{id}(resource still not implemented)
- π Incorrect Implementation - Bug that needs fixing
- β Not in Spec - Implemented but not in OpenAPI spec (may be undocumented/legacy)
- β Not Implemented - Entire resource missing from library
β οΈ Partially Implemented - Some methods/endpoints missing- β Fully Implemented - Matches OpenAPI spec
The following bugs have been fixed:
| Request | Fix Applied |
|---|---|
SendSalesInvoiceEmailRequest |
POSTβPATCH, endpoint send_emailβsend_invoice |
SendEstimateEmailRequest |
POSTβPATCH, endpoint send_emailβsend_estimate |
DuplicateSalesInvoiceToCreditInvoiceRequest |
POSTβPATCH |
MarkSalesInvoiceAsUncollectibleRequest |
POSTβPATCH |
ChangeEstimateStateRequest |
State moved from URL path to request body |
These are implemented but do not appear in the official OpenAPI spec. They may be undocumented legacy endpoints that work, or they may not work at all. Needs verification against the live API.
| File | Endpoint | Status |
|---|---|---|
MarkSalesInvoiceAsSentRequest.php |
mark_as_sent |
β Not in spec |
MarkSalesInvoiceAsPaidRequest.php |
mark_as_paid |
β Not in spec |
MarkSalesInvoiceAsAcceptedRequest.php |
mark_as_accepted |
β Not in spec |
MarkSalesInvoiceAsPublishedRequest.php |
mark_as_published |
β Not in spec |
MarkSalesInvoiceAsUnpublishedRequest.php |
mark_as_unpublished |
β Not in spec |
Note: The spec only documents mark_as_dubious and mark_as_uncollectible.
These resources have synchronization methods implemented, but the OpenAPI spec does NOT include sync endpoints for them:
| Resource | Methods in Codebase | In Spec? |
|---|---|---|
| Products | synchronization(), synchronize() |
β No |
| Financial Statements | synchronization(), synchronize() |
β No |
Update 2026-07-12: External Sales Invoices synchronization was added to the official spec and is no longer in this list β the existing getSynchronization() / synchronize() implementation is now spec-compliant.
The OpenAPI spec only supports:
POST /financial_statements(create)PATCH /financial_statements/{id}(update)DELETE /financial_statements/{id}(delete)
But the codebase also has:
paginate(),all()- Not in spec (no GET list endpoint)get()- Not in spec (no GET by ID endpoint)synchronization(),synchronize()- Not in spec
The OpenAPI spec does NOT have a POST endpoint for creating ledger accounts, but LedgerAccountsEndpoint::create() exists.
ImportMappingsEndpoint exists but the entire /import_mappings resource is not in the OpenAPI spec.
Full asset management including depreciation tracking.
Endpoints needed:
GET/POST /{administration_id}/assets- List/CreateGET/PATCH/DELETE /{administration_id}/assets/{id}- CRUDPOST /{administration_id}/assets/{id}/disposals- Create disposalPOST/DELETE /{administration_id}/assets/{id}/sources- Manage sources (delete usessource_id)POST/DELETE /{administration_id}/assets/{id}/reinvestment_reserve_purchase- (new in v2-20260710)POST/DELETE /{administration_id}/assets/{id}/reinvestment_reserve_sale- (new in v2-20260710)POST /{administration_id}/assets/{id}/value_changes/*- Value changes (arbitrary, divestment, full_depreciation, manual, retroactive)
Analytical reports for the administration.
Endpoints needed:
- Balance sheet, Cash flow, Profit & loss
- Creditors, Debtors
- Creditors aging, Debtors aging (new in v2-20260710)
- Revenue/Expenses by contact/project
- General ledger, Journal entries
- Tax report, Subscriptions report, Assets report
- Export endpoints (auditfile, brugstaat, ledger_accounts)
POST /{administration_id}/customer_contact_portal/{contact_id}- Create portal linkGET .../invoices- List invoicesGET .../subscriptions/{id}- Get subscription
GET /{administration_id}/downloads- List downloadsGET /{administration_id}/downloads/{id}/download- Download file
POST /{administration_id}/sepa_credit_transfer
GET /{administration_id}/workflows- List workflowsGET /{administration_id}/workflows/{id}- Get single workflow (new in v2-20260710)
Task management resource family, entirely new in the spec:
GET/POST /{administration_id}/task_lists+GET/PATCH/DELETE /task_lists/{id}POST /task_lists/{task_list_id}/groupsGET/PATCH/DELETE /task_list_groups/{id}+POST /task_list_groups/{task_list_group_id}/tasksGET/PATCH/DELETE /task_list_tasks/{id}POST/DELETE /task_list_tasks/{task_list_task_id}/assignmentPOST/DELETE /task_list_tasks/{task_list_task_id}/completionPOST /task_list_tasks/{task_list_task_id}/notesGET/POST /task_list_templates+GET/PATCH/DELETE /task_list_templates/{id}POST /task_list_templates/{task_list_template_id}/groupsPOST /task_list_templates/{task_list_template_id}/task_lists
Missing: POST .../archive - Archive a contact
Missing:
PATCH /{id}/bill_estimate- Bill an estimateGET /find_by_estimate_id/{estimate_id}- Find by IDGET /{id}/download_pdf- Download PDF- Attachments sub-resource (CRUD + download)
Missing:
PATCH /{id}/mark_as_dubious- Mark as dubiousPATCH /{id}/mark_as_uncollectible- Mark as uncollectible- Notes sub-resource
Note: Synchronization endpoints were added to the spec in v2-20260710; the existing implementation is now spec-compliant.
Missing: GET /default - Get default identity
Missing:
GET /identifier/{identifier}- Find by identifierGET /{id}/sales_link- Get sales link
Note: Synchronization methods exist but are NOT in spec.
Missing:
POST /send_reminders- Bulk send remindersGET /{id}/download_pdf- Download PDFGET /{id}/download_packing_slip_pdf- Download packing slipGET /{id}/download_ubl- Download UBLPATCH /{id}/mark_as_dubious- Mark as dubiousPOST /{id}/pause- Pause remindersPOST /{id}/resume- Resume remindersPATCH /{id}/register_payment_creditinvoice- Register via credit invoice
Missing:
GET /{id}/checkout_identifierGET /{id}/sales_link
Missing: POST /{id}/create_and_schedule_one_off_sales_invoice
Missing:
- Notes sub-resource (CRUD)
PATCH /{id}/resume- Resume a running time entry (new in v2-20260710)PATCH /{id}/stop- Stop a running time entry (new in v2-20260710)
Missing: DELETE /{id}/unlink_booking
Missing on General Documents, General Journal Documents, Purchase Invoices, Receipts:
GET .../attachments/{id}/download- Download attachment
Missing:
GET /webhooks- List all webhooksGET /webhooks/{id}- Get single webhookDELETE /webhooks/{id}- Delete webhookPATCH /webhooks/{id}/activate- Activate webhook (new in v2-20260710)PATCH /webhooks/{id}/deactivate- Deactivate webhook (new in v2-20260710)
These match the OpenAPI spec:
| Resource | Spec Methods | Status |
|---|---|---|
| Administrations | GET (list) | β |
| Custom Fields | GET (list) | β |
| Document Styles | GET (list) | β |
| Financial Accounts | GET (list) | β |
| Payments | GET (by ID only) | β |
| Projects | Full CRUD | β |
| Purchase Transactions | Full CRUD | β |
| Recurring Sales Invoices | Full CRUD + sync + notes | β |
| Tax Rates | GET (list) | β |
| Users | GET (list, by ID) | β |
| Verifications | GET (list) | β |
| Contacts | Full CRUD + sync + sub-resources | β (except archive) |
| Sales Invoices | Full CRUD + sync + payments + notes | β (except downloads/status methods) |
All critical bugs have been fixed:
- 5 requests now use correct HTTP method (PATCH)
- 2 requests now use correct endpoint names
- 1 request now sends state in body instead of URL
- 5 sales invoice mark_as_* endpoints not in spec
- 2 resources have sync methods not in spec (Products, Financial Statements) β External Sales Invoices sync is now official
- Financial Statements GET methods not in spec
- Ledger Accounts create() not in spec
- Entire Import Mappings resource not in spec
- 7 entire resources (Assets, Reports, Customer Portal, Downloads, SEPA, Workflows, Task Lists)
- Various sub-methods on existing resources (incl. new time entry resume/stop and webhook activate/deactivate)
- The OpenAPI spec uses
{format}suffix (e.g.,.json), but this library uses headers - Undocumented endpoints should be tested against the live API before removal