This document tracks the differences between this PHP library and the official Moneybird OpenAPI specification.
Last Updated: 2025-01-07
OpenAPI Spec Version: v2-20251223-d1277b6a05
Spec File: openapi-specs/openapi-2025-01-07.yml
- 🐛 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 |
| External Sales Invoices | getSynchronization(), synchronize() |
❌ No |
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 sourcesPOST /{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
- Revenue/Expenses by contact/project
- General ledger, Journal entries
- Tax report, Subscriptions 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 workflows
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 methods exist but are NOT in spec.
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)
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 webhook
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
- 3 resources have sync methods not in spec (Products, Financial Statements, External Sales Invoices)
- Financial Statements GET methods not in spec
- Ledger Accounts create() not in spec
- Entire Import Mappings resource not in spec
- 6 entire resources (Assets, Reports, Customer Portal, Downloads, SEPA, Workflows)
- Various sub-methods on existing resources
- 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