Send invoice (v2)
POST/v2/invoices/send
Business-shaped invoice send endpoint. Recommended for new integrations.
Accepts a structured invoice + routing JSON body, validates totals and tax breakdowns, builds a Peppol BIS Billing 3.0 UBL document, and submits it to the network.
Key differences from v1:
- Uses
supplier/buyerinstead ofvendor/customerName - Structured addresses with explicit
countryCode taxRateis a percentage (21.0 for 21%), not a fraction (0.21)- Explicit
totalsblock cross-validated against line items - No extraction concepts (
extractionConfidence, etc.)
Idempotency: Pass an Idempotency-Key header (any unique string up
to 128 chars) to prevent duplicate submissions on retry.
Pre-flight validation:
- Sender and receiver must be valid ISO 6523 IDs (
XXXX:identifier) - Declared
subtotalmust equal sum of line extensions (zero tolerance) grandTotalmust equalsubtotal − allowances + charges + taxAmount- UBL is validated against Peppol BIS 3.0 rules before network submission
Request
Responses
- 200
- 400
- 401
- 403
- 429
Invoice submitted
Response Headers
Effective per-minute request budget for this API key + verb. Defaults to 60 GET / 20 POST, overridable per key via the admin policy endpoint.
Requests remaining in the current window for this API key + verb.
Decrements by 1 on each accepted request; resets to limit when
the sliding window rolls over.
Unix epoch seconds at which the oldest request in the current window ages out — i.e. the earliest time remaining could increase.
Echoes the Idempotency-Key request header back to the client on
every response where one was supplied, so integrator retry logic
can correlate against the server's view of the request.
true when the response body was served from the idempotency cache
(i.e. the request was a replay of a previously accepted submission).
false on the first submission with a given Idempotency-Key.
Validation error
Missing or invalid credentials
Source IP is not in the allowlist for this API key. Configured via
the admin policy endpoint — when allowedIps is set, the source IP
of every /v1/* request is checked against the list.
Rate limit exceeded. Defaults: 60 GET/min, 20 POST/min per API key;
overridable per key via the admin policy endpoint. Every response
(success and 429) carries X-RateLimit-Limit, X-RateLimit-Remaining,
X-RateLimit-Reset.
Response Headers
Seconds to wait before retrying
Effective per-minute request budget for this API key + verb. Defaults to 60 GET / 20 POST, overridable per key via the admin policy endpoint.
Requests remaining in the current window for this API key + verb.
Decrements by 1 on each accepted request; resets to limit when
the sliding window rolls over.
Unix epoch seconds at which the oldest request in the current window ages out — i.e. the earliest time remaining could increase.