List invoices
const url = 'https://app.nexym.nl/api/connect/invoices?per_page=50&page=1';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://app.nexym.nl/api/connect/invoices?per_page=50&page=1' \ --header 'Authorization: Bearer <token>'A page of invoices for the key’s project, each with its full lines.
Requires invoices: read (or write).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Records per page. Values above 200 are silently clamped to 200. The value is not otherwise validated, so send a sensible positive integer.
1-based page number.
Responses
Section titled “Responses”A page of invoices.
object
object
Index of the first record on this page, or null on an empty page.
One entry of the paginator’s rendered link list.
object
object
The canonical document key, unique within the project.
The hub’s own word for how far the document has got, mapped from the source
system’s vocabulary. The shipped vocabulary for an order is open,
processing, paid, shipped, completed, cancelled, refunded,
on_hold; for a shipment open, packed, shipped, in_transit,
delivered, returned, cancelled. A project may curate its own words, so
treat this as an open string rather than a fixed enum.
How far the money has got, which is a different question from how far the
document has got. Shipped vocabulary: pending, authorised, paid,
partially_paid, partially_refunded, refunded, cancelled,
chargeback.
A denormalised address or contact block, stored as JSON exactly as the mapping produced it. Keys vary by connector and by project mapping; treat it as an open object rather than a fixed shape.
A denormalised address or contact block, stored as JSON exactly as the mapping produced it. Keys vary by connector and by project mapping; treat it as an open object rather than a fixed shape.
A denormalised address or contact block, stored as JSON exactly as the mapping produced it. Keys vary by connector and by project mapping; treat it as an open object rather than a fixed shape.
Free-form store for fields the universal schema does not define for everybody: a connector’s declared extension fields and a project’s own customer fields, each under its own name.
One line of a document. Money and quantity columns are strings.
object
The parent document’s id.
The source system’s own identifier for this line.
Three decimals.
Four decimals.
Free-form store for fields the universal schema does not define for everybody: a connector’s declared extension fields and a project’s own customer fields, each under its own name.
Example
{ "current_page": 1, "first_page_url": "https://app.nexym.nl/api/connect/orders?page=1", "from": 1, "last_page": 7, "last_page_url": "https://app.nexym.nl/api/connect/orders?page=7", "links": [ { "url": "https://app.nexym.nl/api/connect/orders?page=2", "label": "2", "page": 2, "active": false } ], "next_page_url": "https://app.nexym.nl/api/connect/orders?page=2", "path": "https://app.nexym.nl/api/connect/orders", "per_page": 50, "prev_page_url": null, "to": 50, "total": 318, "data": [ { "id": 12044, "project_id": 3, "reference": "SO-10241", "customer_reference": "CUST-0099", "location_reference": "WH-MAIN", "status": "processing", "financial_status": "paid", "currency": "EUR", "subtotal": "49.90", "tax_total": "10.48", "shipping_total": "4.95", "discount_total": "0.00", "grand_total": "65.33", "customer": { "name": "Acme Interiors", "street": "Voorstraat 12", "postcode": "1234 AB", "city": "Middelburg", "country": "NL" }, "billing": { "name": "Acme Interiors", "street": "Voorstraat 12", "postcode": "1234 AB", "city": "Middelburg", "country": "NL" }, "shipping": { "name": "Acme Interiors", "street": "Voorstraat 12", "postcode": "1234 AB", "city": "Middelburg", "country": "NL" }, "notes": "Leave with the neighbour if nobody answers.", "meta": { "service_code": "INSTALL-STD" }, "source_connection_id": 7, "created_at": "2026-09-14T13:42:10.000000Z", "updated_at": "2026-09-15T08:01:55.000000Z", "order_reference": "SO-10241", "is_virtual": false, "issued_at": "2026-09-15T00:00:00.000000Z", "due_at": "2026-10-15T00:00:00.000000Z", "lines": [ { "id": 880341, "project_id": 3, "document_id": 12044, "line_reference": "1", "variant_reference": "ACME-1234-BLK", "sku": "ACME-1234-BLK", "name": "Widget 40 mm, black", "qty": "2.000", "unit_price": "24.9500", "tax_rate": "21.00", "tax_amount": "10.48", "discount": "0.00", "line_total": "49.90", "meta": { "service_code": "INSTALL-STD" }, "created_at": "2026-09-14T13:42:10.000000Z", "updated_at": "2026-09-14T13:42:10.000000Z" } ] } ]}No key, a key that does not match, a revoked key, or an expired one. The body says which, and nothing else — an unusable key is never described further.
Every error this API returns carries a single human-readable message.
object
Examples
No bearer token, or one too short to hold a prefix
{ "message": "Missing or invalid API key."}Unknown key, or a failed hash check
{ "message": "Invalid API key."}The key was revoked in the dashboard
{ "message": "API key has been revoked."}The key's expiry has passed
{ "message": "API key has expired."}The key is valid but its abilities do not cover this resource at this right.
Every error this API returns carries a single human-readable message.
object
Examples
{ "message": "This API key lacks read access to orders."}{ "message": "This API key lacks write access to stock."}The per-minute rate limit was exceeded. The limit is 120 requests per minute by
default (CONNECT_API_RATE_PER_MIN), counted per API key — or per IP address for
a request that never authenticated.
Every error this API returns carries a single human-readable message.
object
Examples
{ "message": "Too many requests — slow down."}Headers
Section titled “Headers”Seconds until the limit resets.
Requests allowed per minute.
Requests left in the current window.