Conventions
Every request and response follows the same rules. Know this page and you know the API.
The envelope
Every response shares the same shape. Success:
{
"data": { },
"meta": { }
}Failure:
{
"error": {
"code": "not_found",
"message": "Invoice not found."
}
}data holds the object or list you asked for. meta holds extras such as pagination. There is no top-level success boolean. On failures, see Errors for the error object.
Identifiers
Every object has a guid: a stable UUID. Relations use *_guid, for example client_guid on an invoice. Store these GUIDs in your own system.
Have your own ids? Use external_id: a free-form field you set and can filter on where the endpoint supports it.
Dates and amounts
- Dates:
YYYY-MM-DD, e.g.2026-07-21(as withinvoice_date/due_date). - Timestamps: ISO-style strings in fields such as
created_at,paid_atandsent_at. - Amounts: decimal euro values. On invoices e.g.
subtotal,vat,vat_price,total_ex_vatandtotal_inc_vat.
Pagination
List endpoints paginate with page and per_page. Default page=1, default per_page=25, maximum per_page=200.
curl -sS "https://api.appficient.nl/v1/invoices?page=2&per_page=50" \
-H "Authorization: Bearer apf_your_key_here"meta tells you where you are:
{
"data": [ ],
"meta": {
"page": 2,
"per_page": 50,
"total": 128,
"pages": 3
}
}Filter, search and sort
- Filter with query parameters, e.g.
?client_guid=...or?payment_status=.... - Search with
?search=...(many lists also accept?qs=...) on fields documented per endpoint. - Sort with
?sort=and?order=asc|desc. Supported sort fields are listed per endpoint.
An unknown filter, sort or enum value returns 422 with details. The API never silently substitutes a value.