Naar de inhoud

Endpoint-referentie

Alle endpoints van de REST API v1 met parameters, body, antwoorden en voorbeelden.

Alle endpoints, gegenereerd uit de OpenAPI-specificatie. De veldbeschrijvingen zijn in het Engels. Wil je een client genereren? Gebruik de specificatie direct.

Machineleesbare specificatie (OpenAPI 3.1): https://eenfactuurmaken.nl/api/v1/openapi.json

Account

The authenticated user: plan, limits and usage.

GET /api/v1/me

Get the current user, plan, limits and usage

Parameters en antwoorden

Antwoorden

  • 200 The caller. (application/json: Me)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/me" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Business

Your business profile (the seller on every invoice): KvK, btw-id, IBAN, numbering and defaults.

GET /api/v1/business

Get your business profile

Parameters en antwoorden

Antwoorden

  • 200 Business profile. (application/json: Business)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/business" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

PATCH /api/v1/business

Update your business profile

Partial update. Numbering changes are validated so numbers stay unique and gap-free. Payment details (iban, bic, bankAccountName, defaultPaymentLink) and the reply-to email can only be changed in the web app with a recent sign-in, to protect against payment-redirection fraud: with an API key or AI app (MCP/OAuth) a request that changes one of them returns 403 session_required (sending the current value unchanged is fine). The account owner is always emailed when they change.

Parameters en antwoorden

Body: application/json BusinessUpdate

Body
VeldTypeOmschrijving
namestring
legalNamestring | null
addressLine1string | null
addressLine2string | null
postalCodestring | null
citystring | null
countrystring
kvkNumberstring | nullKvK number (8 digits). Required on Dutch invoices.
vatNumberstring | nullYour VAT number (btw-id), e.g. NL123456789B01. Required unless you use the KOR.
ibanstring | nullIBAN for payments. Web app session only: with an API key or AI app, changing iban, bic, bankAccountName, email or defaultPaymentLink returns 403 session_required.
bicstring | nullBIC of your bank. Web app session only (403 session_required with an API key).
bankAccountNamestring | nullAccount holder name. Web app session only (403 session_required with an API key).
emailstring (email) | null | ""Reply-to address of the invoice emails. Web app session only (403 session_required with an API key).
phonestring | null
websitestring | null
peppolIdstring | null
defaultVatTreatment"standard" | "reverse_charge" | "intra_eu" | "export" | "kor" | "exempt"Default VAT treatment. Use kor if you use the small business scheme (kleineondernemersregeling).
defaultSupplyType"goods" | "services"
defaultVatExemptionReasonstring | null
notInHandelsregisterboolean
defaultVatRatestring | number
defaultPaymentTermDaysinteger
defaultCurrencystring
defaultInvoiceLocale"nl" | "en" | "de" | "fr"
defaultNotesstring | null
defaultFooterstring | null
defaultPaymentLinkstring (uri) | null | ""
defaultLayoutIdstring | null
houseStyleobject | null
showEpcQrByDefaultboolean
invoiceNumberFormatstringNumber format. Tokens: {YYYY} {YY} {MM} {SEQ} {SEQ:n}. Example: "{YYYY}-{SEQ:4}" → 2026-0001.
nextInvoiceSequenceinteger
creditNoteNumberFormatstringNumber format for credit notes, e.g. "C{YYYY}-{SEQ:4}".
nextCreditNoteSequenceinteger
resetSequenceYearlybooleanRestart the sequence at 1 every calendar year (needs a year token in the format).
remindersEnabledboolean
reminderScheduleinteger[]Days after the due date to send automatic reminders (Pro), e.g. [7, 14, 30].
reminderMessagestring | null
invoiceEmailSubjectstring | null
invoiceEmailMessagestring | null

Antwoorden

  • 200 Updated profile. (application/json: Business)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 403 Forbidden. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X PATCH "https://eenfactuurmaken.nl/api/v1/business" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kvkNumber":"87654321","vatNumber":"NL001234567B89","invoiceNumberFormat":"{YYYY}-{SEQ:4}"}'

Customers

Customers (afnemers). Deleting a customer that is used on invoices archives it instead.

GET /api/v1/customers

List customers

Search with q (name, email, KvK, VAT number).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
qstring (query)
pageinteger (query)
pageSizeinteger (query)
includeArchivedboolean | "0" | "1" | "true" | "false" | "" (query)
archivedboolean | "0" | "1" | "true" | "false" | "" (query)

Antwoorden

  • 200 A page of customers. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/customers" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/customers

Create a customer

Parameters en antwoorden

Body: application/json CustomerInput

Body
VeldTypeOmschrijving
type"business" | "individual"business (B2B) or individual (consumer). Default: "business".
name*stringCompany or person name as printed on the invoice.
contactNamestring | null
emailstring (email) | null | ""
emailCcstring | nullExtra recipients (comma separated) for invoice emails.
phonestring | null
addressLine1string | null
addressLine2string | null
postalCodestring | null
citystring | null
countrystringISO 3166-1 alpha-2 country code. Defaults to NL.
kvkNumberstring | nullKvK number (Dutch Chamber of Commerce, 8 digits). Recommended for Dutch business customers.
vatNumberstring | nullCustomer VAT number (btw-id / VAT ID), e.g. NL123456789B01 or DE123456789. Required for reverse_charge and intra_eu invoices.
peppolIdstring | nullPeppol participant id, e.g. 0106:12345678 (KvK) or 0190:00000000000000000000 (OIN).
defaultVatTreatment"standard" | "reverse_charge" | "intra_eu" | "export" | "kor" | "exempt" | nullVAT treatment suggested for new invoices to this customer.
defaultSupplyType"goods" | "services" | null
paymentTermDaysinteger | nullPayment term in days; overrides the business default.
locale"nl" | "en" | "de" | "fr" | nullLanguage of invoices and emails for this customer: nl, en, de or fr.
notesstring | null
defaultLayoutIdstring | null

Antwoorden

  • 201 The new customer. (application/json: Customer)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/customers" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"business","name":"Bakkerij De Gouden Korst B.V.","contactName":"Sanne de Vries","email":"administratie@goudenkorst.nl","addressLine1":"Marktstraat 12","postalCode":"3511 AB","city":"Utrecht","country":"NL","kvkNumber":"12345678","vatNumber":"NL123456789B01"}'

GET /api/v1/customers/{id}

Get a customer

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The customer. (application/json: Customer)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/customers/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

PATCH /api/v1/customers/{id}

Update a customer

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json CustomerPatch

Body
VeldTypeOmschrijving
type"business" | "individual"
namestring
contactNamestring | null
emailstring (email) | null | ""
emailCcstring | null
phonestring | null
addressLine1string | null
addressLine2string | null
postalCodestring | null
citystring | null
countrystring
kvkNumberstring | null
vatNumberstring | null
peppolIdstring | null
defaultVatTreatment"standard" | "reverse_charge" | "intra_eu" | "export" | "kor" | "exempt" | null
defaultSupplyType"goods" | "services" | null
paymentTermDaysinteger | null
locale"nl" | "en" | "de" | "fr" | null
notesstring | null
defaultLayoutIdstring | null
archivedboolean

Antwoorden

  • 200 The updated customer. (application/json: Customer)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X PATCH "https://eenfactuurmaken.nl/api/v1/customers/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"facturen@goudenkorst.nl","paymentTermDays":30}'

DELETE /api/v1/customers/{id}

Delete (or archive) a customer

Customers used on invoices are archived instead of deleted.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 What happened. (application/json: DeleteResult)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X DELETE "https://eenfactuurmaken.nl/api/v1/customers/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/vat-check

Check an EU VAT number (VIES)

Checks a customer VAT number with the EU VIES service, e.g. before an intra-EU (ICP) invoice. Rate-limited per user.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
vat*string (query)

Antwoorden

  • 200 VIES result. (application/json: VatCheck)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl "https://eenfactuurmaken.nl/api/v1/vat-check?vat=…" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Products

Products and services with a default price and VAT rate.

GET /api/v1/products

List products

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
qstring (query)
pageinteger (query)
pageSizeinteger (query)
includeArchivedboolean | "0" | "1" | "true" | "false" | "" (query)
archivedboolean | "0" | "1" | "true" | "false" | "" (query)

Antwoorden

  • 200 A page of products. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/products" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/products

Create a product

Parameters en antwoorden

Body: application/json ProductInput

Body
VeldTypeOmschrijving
name*string
descriptionstring | null
unitstringDefault: "C62".
unitPriceCents*integer
vatRatestring | number
skustring | null

Antwoorden

  • 201 The new product. (application/json: Product)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/products" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Consultancy","unit":"HUR","unitPriceCents":9500,"vatRate":"21"}'

GET /api/v1/products/{id}

Get a product

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The product. (application/json: Product)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/products/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

PATCH /api/v1/products/{id}

Update a product

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json ProductPatch

Body
VeldTypeOmschrijving
namestring
descriptionstring | null
unitstring
unitPriceCentsinteger
vatRatestring | number
skustring | null
archivedboolean

Antwoorden

  • 200 The updated product. (application/json: Product)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X PATCH "https://eenfactuurmaken.nl/api/v1/products/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"unitPriceCents":10000}'

DELETE /api/v1/products/{id}

Delete (or archive) a product

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 What happened. (application/json: DeleteResult)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X DELETE "https://eenfactuurmaken.nl/api/v1/products/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Invoices

Invoices and credit notes: drafts, issuing (number + frozen snapshots), payment status, credit notes.

GET /api/v1/invoices

List invoices and credit notes

status also accepts overdue (unpaid past due date) and open (issued or sent).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
status"draft" | "issued" | "sent" | "paid" | "cancelled" | "overdue" | "open" (query)
kind"invoice" | "credit_note" (query)
customerIdstring (query)
qstring (query)
fromstring (YYYY-MM-DD) (query)
tostring (YYYY-MM-DD) (query)
pageinteger (query)
pageSizeinteger (query)
sort"issueDate" | "-issueDate" | "number" | "-number" | "total" | "-total" | "dueDate" | "-dueDate" | "createdAt" | "-createdAt" (query)

Antwoorden

  • 200 A page of invoices. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/invoices" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/invoices

Create a draft invoice

Creates a DRAFT. Pass customerId or an inline customer. Counts against the monthly quota (Free: 5 per month); credit notes never count. Issue it with POST /invoices/{id}/issue.

Parameters en antwoorden

Body: application/json InvoiceInput

Body
VeldTypeOmschrijving
kind"invoice" | "credit_note"invoice (default) or credit_note. Credit notes for an existing invoice are easier via POST /invoices/{id}/credit-note. Default: "invoice".
customerIdstring | nullId of an existing customer.
customerCustomerInput | nullInline customer data instead of customerId. A customer record is created for it.
numberstring | nullNormally left empty: the number is assigned when you issue. Must be unique.
issueDatestring (YYYY-MM-DD)Invoice date (factuurdatum). Default: today.
dueDatestring (YYYY-MM-DD)Due date. Default: issue date + payment term.
supplyDatestring (YYYY-MM-DD) | nullDate of supply (leverdatum) if different from the invoice date.
supplyPeriodEndstring (YYYY-MM-DD) | nullEnd of the supply period, for services delivered over a period.
currencystringISO 4217 code. Default: EUR.
locale"nl" | "en" | "de" | "fr"Document language: nl, en, de or fr.
vatTreatment"standard" | "reverse_charge" | "intra_eu" | "export" | "kor" | "exempt"standard (default), reverse_charge (btw verlegd, NL B2B), intra_eu (ICP, EU B2B), export (outside the EU), kor (small business scheme), exempt. Non-standard treatments charge 0% VAT and print the required legal note.
supplyType"goods" | "services"
vatExemptionReasonstring | null
exchangeRatestring | number | null
exchangeRateDatestring (YYYY-MM-DD) | null
exchangeRateSourcestring | null
creditedInvoiceIdstring | null
creditedInvoiceNumberstring | null
creditedInvoiceDatestring (YYYY-MM-DD) | null
referencestring | nullYour own reference, e.g. a project or order number.
buyerReferencestring | nullThe customer's reference (PO number / inkoopordernummer). Some Peppol receivers require it.
notesstring | nullText printed above the totals.
footerstring | nullFooter text.
paymentLinkstring (uri) | null | ""Optional payment URL (e.g. a Tikkie or Mollie link) printed on the invoice.
showEpcQrbooleanPrint the EPC QR code (SEPA payment QR) for banking apps.
layoutIdstring | nullPro: layout for this invoice (preset:classic|modern|minimal or a saved template id). Omit or null: the customer's layout, then the business default / house style. On Free only null or preset:classic is accepted (and the house style is used).
linesInvoiceLineInput[]Invoice lines (max. 500).

Antwoorden

  • 201 The new draft, including a compliance check. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"customer":{"type":"business","name":"Bakkerij De Gouden Korst B.V.","contactName":"Sanne de Vries","email":"administratie@goudenkorst.nl","addressLine1":"Marktstraat 12","postalCode":"3511 AB","city":"Utrecht","country":"NL","kvkNumber":"12345678","vatNumber":"NL123456789B01"},"issueDate":"2026-10-01","dueDate":"2026-10-15","vatTreatment":"standard","reference":"Project nieuwe website","lines":[{"description":"Webdesign en ontwikkeling – september","quantity":"12","unit":"HUR","unitPriceCents":8500,"vatRate":"21"},{"description":"Hosting en onderhoud (jaar)","quantity":"1","unit":"ANN","unitPriceCents":12000,"vatRate":"21"}]}'

GET /api/v1/invoices/next-number

Preview the next invoice and credit note numbers

Parameters en antwoorden

Antwoorden

  • 200 Next numbers (nothing is reserved). (application/json: NextNumberPreview)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl "https://eenfactuurmaken.nl/api/v1/invoices/next-number" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/invoices/{id}

Get an invoice

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The invoice with lines, parties and (for drafts) the compliance check. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl "https://eenfactuurmaken.nl/api/v1/invoices/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

PATCH /api/v1/invoices/{id}

Update a draft

Only drafts can be changed (409 invoice_locked). Correct issued invoices with a credit note.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json InvoiceUpdate

Body
VeldTypeOmschrijving
customerIdstring | null
customerCustomerInput | null
numberstring | null
issueDatestring (YYYY-MM-DD)
dueDatestring (YYYY-MM-DD)
supplyDatestring (YYYY-MM-DD) | null
supplyPeriodEndstring (YYYY-MM-DD) | null
currencystring
locale"nl" | "en" | "de" | "fr"
vatTreatment"standard" | "reverse_charge" | "intra_eu" | "export" | "kor" | "exempt"
supplyType"goods" | "services"
vatExemptionReasonstring | null
exchangeRatestring | number | null
exchangeRateDatestring (YYYY-MM-DD) | null
exchangeRateSourcestring | null
creditedInvoiceIdstring | null
creditedInvoiceNumberstring | null
creditedInvoiceDatestring (YYYY-MM-DD) | null
referencestring | null
buyerReferencestring | null
notesstring | null
footerstring | null
paymentLinkstring (uri) | null | ""
showEpcQrboolean
layoutIdstring | null
linesInvoiceLineInput[]

Antwoorden

  • 200 The updated draft. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X PATCH "https://eenfactuurmaken.nl/api/v1/invoices/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"dueDate":"2026-10-31","lines":[{"description":"Webdesign en ontwikkeling – september","quantity":"12","unit":"HUR","unitPriceCents":8500,"vatRate":"21"},{"description":"Hosting en onderhoud (jaar)","quantity":"1","unit":"ANN","unitPriceCents":12000,"vatRate":"21"}]}'

DELETE /api/v1/invoices/{id}

Delete a draft

Only drafts can be deleted (409 invoice_locked). Issued invoices are kept (Dutch retention duty); cancel or credit them instead. Deleting a draft invoice gives its unit of the monthly quota back.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 Deleted. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X DELETE "https://eenfactuurmaken.nl/api/v1/invoices/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/invoices/{id}/duplicate

Duplicate into a new draft

Copies lines and settings into a new draft with today's dates and no number. Counts against the quota (credit notes do not).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json DuplicateInvoice

Body
VeldTypeOmschrijving
issueDatestring (YYYY-MM-DD)
dueDatestring (YYYY-MM-DD)
supplyDatestring (YYYY-MM-DD) | null
supplyPeriodEndstring (YYYY-MM-DD) | null

Antwoorden

  • 201 The new draft. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/duplicate" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/invoices/{id}/issue

Issue a draft

Runs the Dutch compliance check (422 invoice_not_compliant with details), assigns the next number (gap-free), freezes seller and customer data and locks the invoice.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json IssueInvoice

Body
VeldTypeOmschrijving
numberstring | nullOverride the generated number (must be unique).
issueDatestring (YYYY-MM-DD)Override the invoice date; the due date moves along.

Antwoorden

  • 200 The issued invoice. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/issue" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/invoices/{id}/credit-note

Create a credit note for an invoice

Creates a DRAFT credit note (creditfactuur) that references the invoice, with the same lines (full credit). Edit the lines for a partial credit, then issue it. Credit notes do not count against the monthly quota.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 201 The draft credit note. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/credit-note" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/invoices/{id}/mark-paid

Mark as paid

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json MarkPaid

Body
VeldTypeOmschrijving
paidAtstring (YYYY-MM-DD)

Antwoorden

  • 200 The invoice. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/mark-paid" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"paidAt":"2026-10-10"}'

POST /api/v1/invoices/{id}/mark-unpaid

Mark as unpaid

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The invoice. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/mark-unpaid" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/invoices/{id}/cancel

Cancel an issued invoice

Only issued/sent unpaid invoices. The number stays used. For paid invoices, create a credit note. An invoice that already has an issued credit note can't be cancelled any more (409 invoice_has_credit_notes, details.creditNotes): the credit note is the correction.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The cancelled invoice. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/cancel" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/exchange-rate

ECB exchange rate for a currency

Euro reference rate of the European Central Bank (EUR per unit) for invoices in another currency; date defaults to today. 422 exchange_rate_unknown_currency, 503 exchange_rate_unavailable (enter the rate manually).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
currency*string (query)
datestring (YYYY-MM-DD) (query)

Antwoorden

  • 200 The rate. (application/json: ExchangeRate)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)
  • 503 An external service (VIES, ECB, Stripe) is unavailable. Try again later. (application/json: Error)

Voorbeeld

cURL

curl "https://eenfactuurmaken.nl/api/v1/exchange-rate?currency=…" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Documents

PDF and UBL (Peppol BIS Billing 3.0 / NLCIUS) files, previews and compliance checks.

GET /api/v1/invoices/{id}/pdf

Download the PDF

?download=1 sets Content-Disposition: attachment and marks an issued document as downloaded (downloadedAt). Drafts get a "concept" watermark.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.
download"0" | "1" | "true" | "false" (query)
embedUbl"0" | "1" | "true" | "false" (query)

Antwoorden

  • 200 PDF file. (application/pdf: string)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/invoices/{id}/pdf" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/invoices/{id}/ubl

Download the UBL e-invoice

UBL 2.1, Peppol BIS Billing 3.0 / NLCIUS. Issued invoices only (409 invoice_not_issued). Dutch sellers need a KvK number for Peppol (409 peppol_kvk_required). Credit notes produce a CreditNote document. Marks the document as downloaded (downloadedAt).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.
download"0" | "1" | "true" | "false" (query)
embedPdf"0" | "1" | "true" | "false" (query)

Antwoorden

  • 200 UBL XML. (application/xml: string)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/invoices/{id}/ubl" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/invoices/{id}/compliance

Check the Dutch invoice requirements

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 Issues (empty = compliant). (application/json: ComplianceIssue[])
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/invoices/{id}/compliance" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/invoices/preview-pdf

Render a preview PDF

Renders an unsaved invoice and/or layout. Nothing is stored. Any plan may preview custom layouts.

Parameters en antwoorden

Body: application/json PreviewPdf

Body
VeldTypeOmschrijving
invoiceInvoiceInput | null
layoutIdstring | null
layoutLayoutConfig | null

Antwoorden

  • 200 PDF with a draft watermark. (application/pdf: string)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/preview-pdf" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/public/invoices/{token}

Openbaar

Public invoice page data

What the customer sees on /i/{token}: display-ready, in the invoice language. 404 when the token is unknown or the link was switched off. Rate-limited per IP.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{token}*string (path)Signed token from get_invoice_download_links.

Antwoorden

  • 200 The public invoice. (application/json: PublicInvoice)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/public/invoices/{token}"

GET /api/public/invoices/{token}/pdf

Openbaar

Public invoice PDF

PDF (with the UBL embedded). ?download=1 → attachment.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{token}*string (path)Signed token from get_invoice_download_links.
download"0" | "1" | "true" | "false" (query)

Antwoorden

  • 200 PDF file. (application/pdf: string)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/public/invoices/{token}/pdf"

GET /api/public/invoices/{token}/ubl

Openbaar

Public invoice UBL e-invoice

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{token}*string (path)Signed token from get_invoice_download_links.

Antwoorden

  • 200 UBL XML. (application/xml: string)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/public/invoices/{token}/ubl"

POST /api/public/invoices/{token}/view

Openbaar

Record a view of the public page

Called by the page in the browser. Not counted when the signed-in owner opens their own page; repeated views within 30 minutes count once.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{token}*string (path)Signed token from get_invoice_download_links.

Antwoorden

  • 200 Whether the view was recorded. (application/json: object)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/public/invoices/{token}/view"

Sending

Email invoices (PDF + UBL attached) and payment reminders.

POST /api/v1/invoices/{id}/send

Email the invoice

Emails the PDF and (unless attachUbl is false) the UBL e-invoice as attachments, to the customer email or to. Issued invoices only (409 invoice_not_issued). Status becomes sent. 422 no_recipient when there is no address. Limits: Free can only email the customer's own address(es) on file (email + CC) or the account email (403 email_recipient_not_allowed, details.addresses) and at most 30 recipients (to + cc) per 24 hours (429 email_daily_limit); Pro at most 500 recipients per hour (429 email_rate_limited). The same document can be emailed at most 5 times per 24 hours (429 invoice_resend_limit). Sending pauses for up to 7 days when recent emails of the account bounced or were marked as spam (403 email_sending_paused), and a platform-wide daily cap can apply (429 email_platform_limit).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json SendInvoice

Body
VeldTypeOmschrijving
tostring (email)[]Recipients. Default: the customer email.
ccstring (email)[]CC recipients.
subjectstring | nullSubject. Default: your template.
messagestring | nullMessage body (plain text). Default: your template.
attachUblbooleanAttach the UBL e-invoice next to the PDF. Default: true.

Antwoorden

  • 200 The invoice after sending. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 403 Forbidden. (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/send" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message":"Hoi Sanne,\n\nIn de bijlage vind je de factuur voor september.\n\nGroet, Pieter"}'

POST /api/v1/invoices/{id}/remind

Send a payment reminder now

Emails a friendly payment reminder (betalingsherinnering) for an open (issued/sent, unpaid) invoice. 409 invoice_not_remindable / reminder_too_early, 422 no_recipient.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The invoice (reminderCount and lastReminderAt updated). (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/invoices/{id}/remind" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Reports

Dashboard KPIs, the btw-aangifte helper and the ZIP export.

GET /api/v1/stats

Dashboard KPIs and VAT per quarter

Open, overdue and paid amounts, revenue this year, and the btw-aangifte helper (rubrieken 1a–3b, plus exempt/KOR turnover) for this and the previous quarter. Pass quarter (and optionally year, default this year) to also get any other quarter in vat.selected.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
yearinteger (query)
quarterinteger (query)

Antwoorden

  • 200 Statistics. (application/json: Stats)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/stats" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/export

Pro

Export everything as ZIP

PDF + UBL for every issued invoice and credit note, plus invoices.csv. Optional issue date range. Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
fromstring (YYYY-MM-DD) (query)
tostring (YYYY-MM-DD) (query)

Antwoorden

  • 200 ZIP archive (streamed). (application/zip: string)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/export" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/export/expiring

Download the invoices that will be deleted soon

Every plan. Same ZIP as /export (PDF + UBL + invoices.csv) with the issued invoices and credit notes that the free-plan retention deletes within 30 days. Marks them as downloaded (downloadedAt). You remain responsible for the 7-year retention (bewaarplicht).

Parameters en antwoorden

Antwoorden

  • 200 ZIP archive (streamed). (application/zip: string)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/export/expiring" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Layouts

Invoice layouts. Every plan: the house style (PATCH /api/v1/business `houseStyle`: classic/modern/minimal template, colours, logo placement, QR and payment link) and the built-in presets as the account default. Pro: saved templates (fonts, page size, header/footer texts, label overrides) and choosing a layout per customer or per invoice.

GET /api/v1/layouts

List layouts

Parameters en antwoorden

Antwoorden

  • 200 Built-in presets and your saved templates (custom layouts). The house style is on GET /api/v1/business (houseStyle). (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/layouts" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/layouts

Pro

Create a saved template (custom layout)

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden

Body: application/json LayoutInput

Body
VeldTypeOmschrijving
name*string
config*LayoutConfig

Antwoorden

  • 201 The new layout. (application/json: Layout)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/layouts" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/layouts/{id}

Get a layout

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The layout. (application/json: Layout)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/layouts/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

PATCH /api/v1/layouts/{id}

Pro

Update a saved template (custom layout)

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json LayoutUpdate

Body
VeldTypeOmschrijving
namestring
configobject

Antwoorden

  • 200 The updated layout. (application/json: Layout)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X PATCH "https://eenfactuurmaken.nl/api/v1/layouts/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

DELETE /api/v1/layouts/{id}

Delete a custom layout

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 Deleted. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X DELETE "https://eenfactuurmaken.nl/api/v1/layouts/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Recurring

Recurring invoices (Pro).

GET /api/v1/recurring

Pro

List recurring invoices

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
pageinteger (query)
pageSizeinteger (query)

Antwoorden

  • 200 Your schedules. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/recurring" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/recurring

Pro

Create a recurring invoice

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden

Body: application/json RecurringInput

Body
VeldTypeOmschrijving
templateInvoiceId*string
frequency*"weekly" | "monthly" | "quarterly" | "yearly"
intervalintegerDefault: 1.
nextRunDate*string (YYYY-MM-DD)
endDatestring (YYYY-MM-DD) | null
autoIssuebooleanDefault: true.
autoSendbooleanDefault: false.
activebooleanDefault: true.

Antwoorden

  • 201 The schedule. (application/json: RecurringSchedule)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/recurring" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"templateInvoiceId":"0f8e2a52-7d0b-4c47-9a1e-3c1b2d4e5f60","frequency":"monthly","interval":1,"nextRunDate":"2026-11-01","autoIssue":true,"autoSend":true}'

GET /api/v1/recurring/{id}

Pro

Get a recurring invoice

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The schedule. (application/json: RecurringSchedule)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/recurring/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

PATCH /api/v1/recurring/{id}

Pro

Update a recurring invoice

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Body: application/json RecurringUpdate

Body
VeldTypeOmschrijving
frequency"weekly" | "monthly" | "quarterly" | "yearly"
intervalinteger
nextRunDatestring (YYYY-MM-DD)
endDatestring (YYYY-MM-DD) | null
autoIssueboolean
autoSendboolean
activeboolean

Antwoorden

  • 200 The schedule. (application/json: RecurringSchedule)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X PATCH "https://eenfactuurmaken.nl/api/v1/recurring/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

DELETE /api/v1/recurring/{id}

Pro

Delete a recurring invoice

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 Deleted. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X DELETE "https://eenfactuurmaken.nl/api/v1/recurring/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/recurring/{id}/run-now

Pro

Run a recurring invoice now

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The created invoice. (application/json: Invoice)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/recurring/{id}/run-now" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Email

Custom sender domains (Pro) and the outbound email log.

GET /api/v1/email-domains

Pro

List sender domains

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden

Antwoorden

  • 200 Your domains. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/email-domains" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/email-domains

Pro

Add a sender domain

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden

Body: application/json EmailDomainInput

Body
VeldTypeOmschrijving
domain*string
fromLocalPartstringDefault: "facturen".
fromNamestring | null

Antwoorden

  • 201 The domain with the DNS records to add. (application/json: EmailDomain)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/email-domains" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"studiojansen.nl","fromLocalPart":"facturen","fromName":"Studio Jansen"}'

GET /api/v1/email-domains/{id}

Pro

Get a sender domain

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The domain. (application/json: EmailDomain)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/email-domains/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

DELETE /api/v1/email-domains/{id}

Pro

Remove a sender domain

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 Deleted. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X DELETE "https://eenfactuurmaken.nl/api/v1/email-domains/{id}" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/email-domains/{id}/verify

Pro

Check the DNS records now

Requires the **Pro** plan (402 plan_upgrade_required on Free).

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 The domain with updated status. (application/json: EmailDomain)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 402 Plan limit reached (plan_limit_reached) or Pro needed (plan_upgrade_required). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/email-domains/{id}/verify" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/emails

Outbound email log

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
pageinteger (query)
pageSizeinteger (query)

Antwoorden

  • 200 Sent emails, newest first. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/emails" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

Billing

Your EenFactuurMaken.nl subscription (paid through Stripe; our own invoices for every payment).

GET /api/v1/billing

Subscription and payments

Parameters en antwoorden

Antwoorden

  • 200 Subscription. (application/json: Billing)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/billing" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/billing/checkout

Start a Pro checkout

Parameters en antwoorden

Body: application/json CheckoutInput

Body
VeldTypeOmschrijving
interval*"month" | "year"
locale"nl" | "en"Language of the Stripe Checkout page and the return page.

Antwoorden

  • 200 Checkout URL. (application/json: CheckoutResult)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 422 Validation failed (validation_failed, details = issues) or the invoice does not meet the Dutch requirements (invoice_not_compliant, details = ComplianceIssue[]). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/billing/checkout" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"interval":"month"}'

POST /api/v1/billing/cancel

Cancel Pro at the end of the period

Web app session only (403 session_required with an API key).

Parameters en antwoorden

Antwoorden

  • 200 Subscription. (application/json: Billing)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 403 Forbidden. (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/billing/cancel" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/billing/resume

Undo a cancellation

Restarts renewals before Pro ends (Stripe cancel_at_period_end = false). 409 not_cancelled / subscription_ended (start a new checkout). Web app session only.

Parameters en antwoorden

Antwoorden

  • 200 Subscription. (application/json: Billing)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 403 Forbidden. (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/billing/resume" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/billing/sync

Re-check the checkout and subscription

Asks Stripe for the status of the open checkout session, or of the running subscription and its latest invoice (the return page polls this).

Parameters en antwoorden

Antwoorden

  • 200 Subscription. (application/json: Billing)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/billing/sync" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /api/v1/billing/payments/{id}/invoice

Download our invoice for a payment

The EenFactuurMaken.nl invoice (PDF) for a paid subscription payment.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{id}*string (path)Resource id.

Antwoorden

  • 200 PDF file. (application/pdf: string)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/billing/payments/{id}/invoice" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

POST /api/v1/billing/portal

Open the Stripe billing portal

Short-lived URL of the Stripe billing portal: update the payment method or cancel at the end of the period. Web app session only (403 session_required with an API key). 409 no_billing_account without a running subscription.

Parameters en antwoorden

Body: application/json BillingPortalInput

Body
VeldTypeOmschrijving
locale"nl" | "en"Language of the billing portal and the return page.

Antwoorden

  • 200 Portal URL. (application/json: BillingPortalResult)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 403 Forbidden. (application/json: Error)
  • 409 Conflict with the current state, e.g. invoice_locked, invoice_not_issued, number_taken, invoice_has_credit_notes, invoice_fully_credited, peppol_kvk_required. Each operation lists its own codes. (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

curl -X POST "https://eenfactuurmaken.nl/api/v1/billing/portal" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"locale":"nl"}'

POST /api/webhooks/stripe

Openbaar

Stripe webhook (for Stripe only)

Called by Stripe. Requires a valid Stripe-Signature header over the raw body (400 otherwise). The object is re-fetched from the Stripe API, so the body is never trusted; events are idempotent per event id.

Parameters en antwoorden

Body: application/json object

Antwoorden

  • 200 Acknowledged. (application/json: object)
  • 400 Bad request. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/api/webhooks/stripe"

AI

Machine-readable entry points: this spec, the MCP server and signed download links.

GET /api/v1/openapi.json

Openbaar

This OpenAPI 3.1 document

Parameters en antwoorden

Antwoorden

  • 200 OpenAPI document. (application/json: object)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/api/v1/openapi.json"

POST /mcp

MCP server (Streamable HTTP)

Model Context Protocol endpoint for AI assistants (ChatGPT, Claude, Gemini, Cursor, VS Code). JSON-RPC 2.0 over Streamable HTTP, stateless. Authenticate with an API key or an OAuth access token. See /docs/mcp.

Parameters en antwoorden

Body: application/json object

Antwoorden

  • 200 JSON-RPC response. (application/json: object)
  • 401 Missing or invalid API key (unauthenticated, invalid_api_key). (application/json: Error)
  • 429 Too many requests (rate_limited). Wait the number of seconds in the Retry-After header. (application/json: Error)

Voorbeeld

cURL

cURL

curl -X POST "https://eenfactuurmaken.nl/mcp" \
  -H "Authorization: Bearer $EENFACTUURMAKEN_API_KEY"

GET /d/{token}

Openbaar

Signed download link

Short-lived link (default 15 minutes) to an invoice PDF or UBL file, created by the MCP tool get_invoice_download_links. No authentication: the token is signed. 410 link_expired after expiry.

Parameters en antwoorden
Parameters
ParameterTypeOmschrijving
{token}*string (path)Signed token from get_invoice_download_links.

Antwoorden

  • 200 The file. (application/pdf: string)
  • 404 Not found (also for resources of other accounts). (application/json: Error)
  • 410 Gone (expired link). (application/json: Error)

Voorbeeld

cURL

cURL

curl "https://eenfactuurmaken.nl/d/{token}"

Laatst bijgewerkt op 13 oktober 2026

Kom je er niet uit?

Mail ons op support@eenfactuurmaken.nl. Vertel wat je probeerde en wat er gebeurde, dan helpen we je verder.

support@eenfactuurmaken.nl