Download OpenAPI specification:
REST API for BillMore invoicing and business data.
Base URL: https://api.billmore.com/v1
All endpoints (including /health) require an API key. You can
create and manage API keys in the BillMore web app under
Extensions → API.
Pass the key in the Authorization header as a Bearer token on
every request:
Authorization: Bearer <your-api-key>
Example:
curl https://api.billmore.com/v1/company \
-H "Authorization: Bearer 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
Returns the document usage and quota for the authenticated company's
current billing period. When the plan has unlimited documents,
maxDocuments and remainingDocuments are null and
unlimitedDocuments is true.
{- "status": "active",
- "maxDocuments": 500,
- "usedDocuments": 127,
- "remainingDocuments": 373,
- "unlimitedDocuments": false
}Returns the company details and settings for the authenticated company. Includes identity, address, legal, payment, and tax configuration.
{- "name": "Muster GmbH",
- "name2": "string",
- "countryCode": "DE",
- "address": {
- "line1": "Musterstraße 1",
- "line2": "12345 Berlin",
- "line3": "Deutschland"
}, - "legalInfo": {
- "ceo": "Max Mustermann",
- "customLine1": "HRB 12345, Amtsgericht Berlin",
- "customLine2": "string"
}, - "contactInfo": {
- "email": "info@example.com",
- "phone": "+49 30 123456",
- "customLine1": "string",
- "customLine2": "string"
}, - "paymentInfo": {
- "iban": "DE89 1000 0000 1234 5678 90",
- "bic": "EXMPDEFFXXX",
- "bankName": "Beispielbank",
- "customLine1": "string",
- "customLine2": "string"
}, - "taxNumbers": [
- {
- "description": "USt-IdNr.",
- "number": "DE123456789"
}
], - "currency": "EUR",
- "vat": {
- "name": "MwSt.",
- "rates": [
- 0,
- 7,
- 19
], - "default": 19,
- "smallTrader": false,
- "smallTraderDescription": "string"
}
}Returns a paginated list of documents for the authenticated company. Supports filtering by document type, date range, status flags, and client, plus configurable sorting.
Date-range filters operate on the document date field and are
interpreted in the company's local timezone.
| type | string Enum: "invoice" "estimate" "delivery-note" "purchase-order" "order-confirmation" Filter by document type |
| from | string <date> ^\d{4}-\d{2}-\d{2}$ Example: from=2026-01-01 Inclusive lower bound on the document |
| to | string <date> ^\d{4}-\d{2}-\d{2}$ Example: to=2026-01-31 Inclusive upper bound on the document |
| paid | boolean Filter by the paid status flag. |
| sent | boolean Filter by the sent status flag. |
| finalized | boolean Filter by the finalized status flag. |
| cancelled | boolean Filter by the cancelled status flag. |
| clientId | string Filter by the linked client. Only matches documents that were
created with |
| sort | string Default: "-createdAt" Example: sort=-date,createdAt Comma-separated list of fields to sort by. Prefix a field with
|
| limit | integer [ 1 .. 100 ] Default: 20 Number of results per page (max 100) |
| skip | integer >= 0 Default: 0 Number of results to skip for pagination |
{- "results": [
- {
- "id": "abc123",
- "type": "invoice",
- "number": "RE-2026-0042",
- "date": "2026-02-08",
- "totalAmount": 1190,
- "currency": "EUR",
- "exportType": "pdf",
- "clientName": "Muster GmbH",
- "client": {
- "id": "cl_abc123",
- "name": "Muster GmbH",
- "clientNumber": "K-001"
}, - "paid": true,
- "paidDate": "2026-02-15",
- "sent": true,
- "sentDate": "2026-02-09",
- "finalized": true,
- "finalizedDate": "2026-02-08",
- "cancelled": true,
- "cancelledDate": "2026-02-20",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "total": 0,
- "limit": 0,
- "skip": 0,
- "hasMore": true
}Creates a new document with automatic PDF generation. The document number can be provided or auto-generated based on company settings. A PDF is generated using the company's default layout and uploaded to storage.
For exportType: factur-x and exportType: xrechnung, the
e-invoicing artifact is generated on every save, regardless of
the finalized flag, and validated. The request fails with
422 if validation fails. To save a draft without e-invoice
validation, use exportType: pdf and switch to factur-x /
xrechnung later.
Prerequisites for exportType: factur-x:
countryCode.client must have name and countryCode.Prerequisites for exportType: xrechnung:
countryCode.client must have name, countryCode, email, and
clientNumber.priceLayout: gross is not supported.| type required | string Enum: "invoice" "estimate" "delivery-note" "purchase-order" "order-confirmation" Document type |
| language | string Default: "de" Enum: "de" "en" Language for PDF generation (affects labels and date formatting) |
| number | string Document number. If omitted, auto-generated from company settings. |
| date | string <date> Primary document date (YYYY-MM-DD). Defaults to today. |
| serviceDate | string <date> Service or delivery date (YYYY-MM-DD). Invoice only. |
| serviceDateEnd | string <date> End of service period (YYYY-MM-DD). Only valid with serviceDateType 'service-period'. Invoice only. |
| serviceDateType | string Enum: "service-date" "delivery-date" "service-period" Type of service date. Defaults to 'service-date', or 'service-period' if serviceDateEnd is provided. |
object Inline client/recipient data. Mutually exclusive with clientId. | |
| clientId | string ID of an existing contact. The contact's data will be embedded as a snapshot on the document so later changes to the contact don't change the document. Mutually exclusive with the inline client object. |
required | Array of objects non-empty Document line items. Each line must have either netPrice or grossPrice, not both. |
| introduction | string Text above the line items table. Defaults to company setting for this document type. |
| notes | string Text below the line items table. Defaults to company setting for this document type. |
| priceLayout | string Enum: "net" "gross" Price display mode. Defaults to company setting. |
| discountRate | number [ 0 .. 100 ] Percentage discount (0-100). The only supported discount method. |
| vatRegulation | string Default: "standard" Enum: "standard" "reverse-charge" "intra-community-supply" |
| exportType | string Default: "pdf" Enum: "pdf" "factur-x" "xrechnung" Export format.
Factur-X and XRechnung artifacts are generated on every save,
regardless of the |
| finalized | boolean Default: false Whether to finalize the document immediately (prevents future edits) |
{- "type": "invoice",
- "language": "de",
- "number": "RE-2026-0042",
- "date": "2026-02-09",
- "serviceDate": "2019-08-24",
- "serviceDateEnd": "2019-08-24",
- "serviceDateType": "service-date",
- "client": {
- "name": "string",
- "name2": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "string",
- "phone": "string",
- "notes": "string",
- "taxNumber": "string",
- "clientNumber": "string"
}, - "clientId": "string",
- "lines": [
- {
- "title": "string",
- "title2": "string",
- "netPrice": 0,
- "grossPrice": 0,
- "quantity": 0,
- "vatRate": 0,
- "unit": "string"
}
], - "introduction": "string",
- "notes": "string",
- "priceLayout": "net",
- "discountRate": 100,
- "vatRegulation": "standard",
- "exportType": "pdf",
- "finalized": false
}{- "id": "string",
- "type": "invoice",
- "number": "string",
- "date": "2026-02-08",
- "serviceDate": "2019-08-24",
- "serviceDateEnd": "2019-08-24",
- "serviceDateType": "service-date",
- "client": {
- "name": "string",
- "name2": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "string",
- "phone": "string",
- "notes": "string",
- "taxNumber": "string",
- "clientNumber": "string"
}, - "lines": [
- {
- "title": "string",
- "title2": "string",
- "netPrice": 0,
- "quantity": 0,
- "vatRate": 0,
- "unit": "string"
}
], - "introduction": "string",
- "notes": "string",
- "currency": "string",
- "priceLayout": "net",
- "exportType": "pdf",
- "vatRegulation": "standard",
- "discountRate": 0,
- "netAmount": 0,
- "vatAmount": 0,
- "totalAmount": 0,
- "references": [
- [
- "string"
]
], - "paid": true,
- "paidDate": "2019-08-24",
- "paidNotes": "string",
- "sent": true,
- "sentDate": "2019-08-24",
- "sentNotes": "string",
- "customStatus": true,
- "customStatusDate": "2019-08-24",
- "customStatusName": "string",
- "customStatusNotes": "string",
- "finalized": true,
- "finalizedDate": "2019-08-24",
- "cancelled": true,
- "cancelledDate": "2019-08-24",
- "cancellationReason": "string",
- "parentId": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}Returns a single document with all fields and computed totals.
| id required | string Document ID |
{- "id": "string",
- "type": "invoice",
- "number": "string",
- "date": "2026-02-08",
- "serviceDate": "2019-08-24",
- "serviceDateEnd": "2019-08-24",
- "serviceDateType": "service-date",
- "client": {
- "name": "string",
- "name2": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "string",
- "phone": "string",
- "notes": "string",
- "taxNumber": "string",
- "clientNumber": "string"
}, - "lines": [
- {
- "title": "string",
- "title2": "string",
- "netPrice": 0,
- "quantity": 0,
- "vatRate": 0,
- "unit": "string"
}
], - "introduction": "string",
- "notes": "string",
- "currency": "string",
- "priceLayout": "net",
- "exportType": "pdf",
- "vatRegulation": "standard",
- "discountRate": 0,
- "netAmount": 0,
- "vatAmount": 0,
- "totalAmount": 0,
- "references": [
- [
- "string"
]
], - "paid": true,
- "paidDate": "2019-08-24",
- "paidNotes": "string",
- "sent": true,
- "sentDate": "2019-08-24",
- "sentNotes": "string",
- "customStatus": true,
- "customStatusDate": "2019-08-24",
- "customStatusName": "string",
- "customStatusNotes": "string",
- "finalized": true,
- "finalizedDate": "2019-08-24",
- "cancelled": true,
- "cancelledDate": "2019-08-24",
- "cancellationReason": "string",
- "parentId": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}Partially updates a document. All fields are optional. Three permission tiers apply based on the document state:
Not finalized — all content and status fields can be updated. The
document can also be finalized by passing finalized: true.
Finalized (not cancelled) — only status fields: paid, paidDate,
paidNotes, sent, sentDate, sentNotes, customStatus,
customStatusDate, customStatusName, customStatusNotes.
Finalized and cancelled — only customStatus, customStatusDate,
customStatusName, customStatusNotes.
Immutable fields (type, number, currency) cannot be changed.
Cancellation uses a dedicated future endpoint.
When content fields change, the PDF is automatically regenerated. When a status boolean (paid/sent/customStatus) is set to true without a corresponding date, today's date is used. Setting it to false unsets the date and notes.
| id required | string Document ID |
| date | string <date> Primary document date (YYYY-MM-DD). Content field. |
| serviceDate | string <date> Service or delivery date (YYYY-MM-DD). Invoice only. Content field. |
| serviceDateEnd | string <date> End of service period (YYYY-MM-DD). Invoice only. Content field. |
| serviceDateType | string Enum: "service-date" "delivery-date" "service-period" Type of service date. Content field. |
object Inline client data. Mutually exclusive with clientId. Content field. | |
| clientId | string ID of an existing Client record. Mutually exclusive with client. Content field. |
Array of objects non-empty Document line items. Each line must have either netPrice or grossPrice, not both. Content field. | |
| introduction | string Text above the line items table. Content field. |
| notes | string Text below the line items table. Content field. |
| language | string Enum: "de" "en" Language for PDF generation. Content field. |
| priceLayout | string Enum: "net" "gross" Price display mode. Content field. |
| discountRate | number [ 0 .. 100 ] Percentage discount (0-100). Content field. |
| vatRegulation | string Enum: "standard" "reverse-charge" "intra-community-supply" VAT regulation. Content field. |
| exportType | string Enum: "pdf" "factur-x" "xrechnung" Export format. Content field. Cannot be changed once the document is finalized. |
| finalized | boolean Set to true to finalize the document (one-way, prevents future content edits). |
| paid | boolean Payment status. Status field. |
| paidDate | string <date> Payment date (YYYY-MM-DD). Defaults to today when paid is set to true. Status field. |
| paidNotes | string Payment notes. Status field. |
| sent | boolean Sent status. Status field. |
| sentDate | string <date> Sent date (YYYY-MM-DD). Defaults to today when sent is set to true. Status field. |
| sentNotes | string Sent notes. Status field. |
| customStatus | boolean Custom status flag. Status field (also allowed on cancelled documents). |
| customStatusDate | string <date> Custom status date (YYYY-MM-DD). Defaults to today when customStatus is set to true. |
| customStatusName | string Custom status label. |
| customStatusNotes | string Custom status notes. |
{- "date": "2019-08-24",
- "serviceDate": "2019-08-24",
- "serviceDateEnd": "2019-08-24",
- "serviceDateType": "service-date",
- "client": {
- "name": "string",
- "name2": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "string",
- "phone": "string",
- "notes": "string",
- "taxNumber": "string",
- "clientNumber": "string"
}, - "clientId": "string",
- "lines": [
- {
- "title": "string",
- "title2": "string",
- "netPrice": 0,
- "grossPrice": 0,
- "quantity": 0,
- "vatRate": 0,
- "unit": "string"
}
], - "introduction": "string",
- "notes": "string",
- "language": "de",
- "priceLayout": "net",
- "discountRate": 100,
- "vatRegulation": "standard",
- "exportType": "pdf",
- "finalized": true,
- "paid": true,
- "paidDate": "2019-08-24",
- "paidNotes": "string",
- "sent": true,
- "sentDate": "2019-08-24",
- "sentNotes": "string",
- "customStatus": true,
- "customStatusDate": "2019-08-24",
- "customStatusName": "string",
- "customStatusNotes": "string"
}{- "id": "string",
- "type": "invoice",
- "number": "string",
- "date": "2026-02-08",
- "serviceDate": "2019-08-24",
- "serviceDateEnd": "2019-08-24",
- "serviceDateType": "service-date",
- "client": {
- "name": "string",
- "name2": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "string",
- "phone": "string",
- "notes": "string",
- "taxNumber": "string",
- "clientNumber": "string"
}, - "lines": [
- {
- "title": "string",
- "title2": "string",
- "netPrice": 0,
- "quantity": 0,
- "vatRate": 0,
- "unit": "string"
}
], - "introduction": "string",
- "notes": "string",
- "currency": "string",
- "priceLayout": "net",
- "exportType": "pdf",
- "vatRegulation": "standard",
- "discountRate": 0,
- "netAmount": 0,
- "vatAmount": 0,
- "totalAmount": 0,
- "references": [
- [
- "string"
]
], - "paid": true,
- "paidDate": "2019-08-24",
- "paidNotes": "string",
- "sent": true,
- "sentDate": "2019-08-24",
- "sentNotes": "string",
- "customStatus": true,
- "customStatusDate": "2019-08-24",
- "customStatusName": "string",
- "customStatusNotes": "string",
- "finalized": true,
- "finalizedDate": "2019-08-24",
- "cancelled": true,
- "cancelledDate": "2019-08-24",
- "cancellationReason": "string",
- "parentId": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}Deletes a document. Finalized documents cannot be deleted. An audit log entry is created with a snapshot of the deleted document.
| id required | string Document ID |
{- "error": "Request body is required"
}Sends a document by email to the given recipient with the document's PDF attached. Documents can be sent in any state (drafts and finalized).
On success, the document is automatically marked as sent unless it was already sent or is cancelled.
Each company has a daily email quota.
Requires the API key to carry the email:send permission.
| id required | string Document ID |
| recipient required | string <email> Recipient email address. |
| subject required | string <= 200 characters Subject line. |
| message required | string <= 10000 characters Plain-text message body. |
| sendCopy | boolean Default: false When |
{- "recipient": "recipient@example.com",
- "subject": "Invoice RE-2026-0042",
- "message": "string",
- "sendCopy": false
}{- "messageId": "string",
- "replyTo": "user@example.com",
- "markedAsSent": true,
- "emailLimitPerDay": 0
}Cancels a finalized invoice (Stornorechnung). The original
document is updated in place — cancelled becomes true,
cancelledDate is server-set to the current timestamp, and the
optional cancellationReason is stored.
A separate cancellation artifact (PDF, Factur-X PDF/A-3, or
XRechnung XML — driven by the original document's exportType)
is generated. Validation rules:
type: invoice) can be cancelled.finalized: true.For factur-x and xrechnung documents the same e-invoice
validation that applies to document creation runs against the
cancellation artifact. Validation failures return 422.
Download the generated cancellation artifact via
GET /documents/{id}/cancellation/pdf (PDF / Factur-X) or
GET /documents/{id}/cancellation/xml (XRechnung).
| id required | string Document ID |
| cancellationReason | string <= 1000 characters Optional free-text reason for the cancellation. Empty strings are ignored. |
{- "cancellationReason": "Wrong client selected"
}{- "id": "string",
- "type": "invoice",
- "number": "string",
- "date": "2026-02-08",
- "serviceDate": "2019-08-24",
- "serviceDateEnd": "2019-08-24",
- "serviceDateType": "service-date",
- "client": {
- "name": "string",
- "name2": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "string",
- "phone": "string",
- "notes": "string",
- "taxNumber": "string",
- "clientNumber": "string"
}, - "lines": [
- {
- "title": "string",
- "title2": "string",
- "netPrice": 0,
- "quantity": 0,
- "vatRate": 0,
- "unit": "string"
}
], - "introduction": "string",
- "notes": "string",
- "currency": "string",
- "priceLayout": "net",
- "exportType": "pdf",
- "vatRegulation": "standard",
- "discountRate": 0,
- "netAmount": 0,
- "vatAmount": 0,
- "totalAmount": 0,
- "references": [
- [
- "string"
]
], - "paid": true,
- "paidDate": "2019-08-24",
- "paidNotes": "string",
- "sent": true,
- "sentDate": "2019-08-24",
- "sentNotes": "string",
- "customStatus": true,
- "customStatusDate": "2019-08-24",
- "customStatusName": "string",
- "customStatusNotes": "string",
- "finalized": true,
- "finalizedDate": "2019-08-24",
- "cancelled": true,
- "cancelledDate": "2019-08-24",
- "cancellationReason": "string",
- "parentId": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}Returns the PDF for a document as a binary response.
Use ?disposition=inline to render the PDF inline in a browser
(default is attachment which forces a download).
For cancelled invoices, the cancellation PDF lives at
GET /documents/{id}/cancellation/pdf.
| id required | string Document ID |
| disposition | string Default: "attachment" Enum: "attachment" "inline" Controls the |
{- "error": "Request body is required"
}Returns the standalone XRechnung (UBL Invoice) XML for a document as a text response.
Only available for documents created with exportType: 'xrechnung'.
For Factur-X documents the XML is embedded in the PDF — use
GET /documents/{id}/pdf instead.
For cancelled invoices, the cancellation XRechnung XML lives at
GET /documents/{id}/cancellation/xml.
| id required | string Document ID |
| disposition | string Default: "attachment" Enum: "attachment" "inline" Controls the |
{- "error": "Request body is required"
}Returns the cancellation-invoice PDF (Stornorechnung) for a cancelled invoice as a binary response.
The cancellation PDF is a separate artifact, generated by
POST /documents/{id}/cancel. Only available for invoices that
have already been cancelled (cancelled: true).
Use ?disposition=inline to render the PDF inline in a browser
(default is attachment which forces a download).
| id required | string Document ID |
| disposition | string Default: "attachment" Enum: "attachment" "inline" Controls the |
{- "error": "Request body is required"
}Returns the standalone XRechnung (UBL Invoice) XML for a cancelled invoice as a text response.
The cancellation XML is a separate artifact, generated by
POST /documents/{id}/cancel. Only available for cancelled
invoices that were created with exportType: 'xrechnung'.
Use ?disposition=inline to render the XML inline in a browser.
| id required | string Document ID |
| disposition | string Default: "attachment" Enum: "attachment" "inline" Controls the |
{- "error": "Request body is required"
}Returns a paginated list of contacts (clients) for the authenticated
company. Results are sorted by createdAt descending and include a
lightweight subset of fields.
| limit | integer [ 1 .. 100 ] Default: 20 Number of results per page (max 100) |
| skip | integer >= 0 Default: 0 Number of results to skip for pagination |
{- "results": [
- {
- "id": "AbCdEf1234",
- "name": "Muster GmbH",
- "name2": "string",
- "clientNumber": "1042",
- "email": "user@example.com",
- "countryCode": "DE",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "total": 0,
- "limit": 0,
- "skip": 0,
- "hasMore": true
}Creates a new contact (client) for the authenticated company.
The name field is required. All other fields are optional.
If clientNumber is provided, it must be unique across the
company's contacts. The API does not auto-generate a
clientNumber.
| name required | string Primary contact name (required) |
| name2 | string Secondary name line |
| clientNumber | string Human-readable contact number. Must be unique within the company if set. Not auto-generated by the API. |
| creditorNumber | string |
| debtorNumber | string |
| address1 | string |
| address2 | string |
| address3 | string |
| countryCode | string ISO 3166-1 alpha-2 country code (supported EU + CH + GB set) |
| contactPerson | string |
string <email> | |
| phone | string |
| taxNumber | string |
| vatRegulation | string Enum: "standard" "reverse-charge" "intra-community-supply" |
| notes | string |
object |
{- "name": "string",
- "name2": "string",
- "clientNumber": "string",
- "creditorNumber": "string",
- "debtorNumber": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "user@example.com",
- "phone": "string",
- "taxNumber": "string",
- "vatRegulation": "standard",
- "notes": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}
}{- "id": "AbCdEf1234",
- "type": "client",
- "name": "Muster GmbH",
- "name2": "Abteilung Einkauf",
- "clientNumber": "1042",
- "creditorNumber": "string",
- "debtorNumber": "string",
- "address1": "Musterstraße 1",
- "address2": "12345 Berlin",
- "address3": "string",
- "countryCode": "DE",
- "contactPerson": "Max Mustermann",
- "email": "contact@example.com",
- "phone": "+49 30 123456",
- "taxNumber": "DE123456789",
- "vatRegulation": "standard",
- "notes": "string",
- "customFields": {
- "accountManager": "Anna Schmidt",
- "region": "DACH"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Returns a single contact with all fields.
| id required | string Contact ID |
{- "id": "AbCdEf1234",
- "type": "client",
- "name": "Muster GmbH",
- "name2": "Abteilung Einkauf",
- "clientNumber": "1042",
- "creditorNumber": "string",
- "debtorNumber": "string",
- "address1": "Musterstraße 1",
- "address2": "12345 Berlin",
- "address3": "string",
- "countryCode": "DE",
- "contactPerson": "Max Mustermann",
- "email": "contact@example.com",
- "phone": "+49 30 123456",
- "taxNumber": "DE123456789",
- "vatRegulation": "standard",
- "notes": "string",
- "customFields": {
- "accountManager": "Anna Schmidt",
- "region": "DACH"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Partially updates a contact. All fields are optional. If
clientNumber is changed, it must remain unique across the
company's contacts.
Immutable fields (id, type, createdAt, updatedAt) cannot
be changed.
| id required | string Contact ID |
| name | string |
| name2 | string |
| clientNumber | string If changed, must remain unique within the company. |
| creditorNumber | string |
| debtorNumber | string |
| address1 | string |
| address2 | string |
| address3 | string |
| countryCode | string ISO 3166-1 alpha-2 country code (supported EU + CH + GB set) |
| contactPerson | string |
string <email> | |
| phone | string |
| taxNumber | string |
| vatRegulation | string Enum: "standard" "reverse-charge" "intra-community-supply" |
| notes | string |
object |
{- "name": "string",
- "name2": "string",
- "clientNumber": "string",
- "creditorNumber": "string",
- "debtorNumber": "string",
- "address1": "string",
- "address2": "string",
- "address3": "string",
- "countryCode": "string",
- "contactPerson": "string",
- "email": "user@example.com",
- "phone": "string",
- "taxNumber": "string",
- "vatRegulation": "standard",
- "notes": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}
}{- "id": "AbCdEf1234",
- "type": "client",
- "name": "Muster GmbH",
- "name2": "Abteilung Einkauf",
- "clientNumber": "1042",
- "creditorNumber": "string",
- "debtorNumber": "string",
- "address1": "Musterstraße 1",
- "address2": "12345 Berlin",
- "address3": "string",
- "countryCode": "DE",
- "contactPerson": "Max Mustermann",
- "email": "contact@example.com",
- "phone": "+49 30 123456",
- "taxNumber": "DE123456789",
- "vatRegulation": "standard",
- "notes": "string",
- "customFields": {
- "accountManager": "Anna Schmidt",
- "region": "DACH"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Permanently deletes a contact. An audit log entry is recorded. Existing documents that reference the contact retain their embedded client snapshot and are not affected.
| id required | string Contact ID |
{- "message": "Unauthorized"
}Returns a paginated list of products for the authenticated company.
Results are sorted by createdAt descending and include a lightweight
subset of fields.
| limit | integer [ 1 .. 100 ] Default: 20 Number of results per page (max 100) |
| skip | integer >= 0 Default: 0 Number of results to skip for pagination |
{- "results": [
- {
- "id": "AbCdEf1234",
- "title": "Beratungsstunde",
- "title2": "string",
- "netPrice": 150,
- "vatRate": 19,
- "unit": "h",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "total": 0,
- "limit": 0,
- "skip": 0,
- "hasMore": true
}Creates a new product for the authenticated company. The title field
is required. All other fields are optional.
Either netPrice or grossPrice may be provided (not both). If
grossPrice is provided, vatRate is required and the API will
compute and store the netPrice. grossPrice is never stored or
returned.
| title required | string Primary product name (required) |
| title2 | string Secondary name / subtitle |
| netPrice | number <double> Net unit price. Mutually exclusive with |
| grossPrice | number <double> Gross unit price (VAT included). The API computes and stores
the corresponding |
| vatRate | number <double> [ 0 .. 100 ] VAT rate as a percentage (0–100). Required if |
| unit | string |
| barcode | string |
| notes | string |
{- "title": "string",
- "title2": "string",
- "netPrice": 0.1,
- "grossPrice": 0.1,
- "vatRate": 100,
- "unit": "string",
- "barcode": "string",
- "notes": "string"
}{- "id": "AbCdEf1234",
- "title": "Beratungsstunde",
- "title2": "Senior Consulting",
- "netPrice": 150,
- "vatRate": 19,
- "unit": "h",
- "barcode": "string",
- "notes": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Returns a single product with all fields.
| id required | string Product ID |
{- "id": "AbCdEf1234",
- "title": "Beratungsstunde",
- "title2": "Senior Consulting",
- "netPrice": 150,
- "vatRate": 19,
- "unit": "h",
- "barcode": "string",
- "notes": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Partially updates a product. All fields are optional.
Either netPrice or grossPrice may be provided (not both). If
grossPrice is provided without vatRate in the same body, the
product's currently stored vatRate will be used for the
net-price conversion.
Immutable fields (id, createdAt, updatedAt) cannot be changed.
| id required | string Product ID |
| title | string |
| title2 | string |
| netPrice | number <double> |
| grossPrice | number <double> Gross unit price (VAT included). The API computes and stores
the corresponding |
| vatRate | number <double> [ 0 .. 100 ] |
| unit | string |
| barcode | string |
| notes | string |
{- "title": "string",
- "title2": "string",
- "netPrice": 0.1,
- "grossPrice": 0.1,
- "vatRate": 100,
- "unit": "string",
- "barcode": "string",
- "notes": "string"
}{- "id": "AbCdEf1234",
- "title": "Beratungsstunde",
- "title2": "Senior Consulting",
- "netPrice": 150,
- "vatRate": 19,
- "unit": "h",
- "barcode": "string",
- "notes": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Permanently deletes a product. An audit log entry is recorded. Existing documents that reference the product retain their line snapshots and are not affected.
| id required | string Product ID |
{- "message": "Unauthorized"
}