Frequently asked questions
Short answers to the questions integrators ask most. Each one links to the section with the full detail. Paths are relative to /einv/oauth.
Access and limits
What are the rate limits, per client and per entity?
Limits are per client (OAuth application); all of a client's entities share them — there is no separate per-entity limit. Every API endpoint together allows 20 requests per second and 600 per minute; POST /token allows 30 per minute per client_id. Over a limit the API answers 429 with a Retry-After header, and every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.
How long is an access token valid?
An access token lasts 3600 seconds (1 hour), returned as expires_in. A refresh token lasts 30 days. Reuse the access token until shortly before it expires rather than requesting one per call.
Webhooks
Are failed deliveries retried, and can missed events be replayed?
No to both, at present. Each event is delivered once, with a 10-second timeout, and any 2xx response counts as delivered. To catch up on anything missed, call GET /invoices/sent or GET /invoices/received with date_from set to the time of your last successful sync.
Receiving invoices
What does a received invoice look like?
The Invoices page shows a complete example response: the parties, invoice information, totals and VAT breakdown, payment details and the lines. Each line carries its VAT category and item codes — seller's item id, standard item id and HS code — when the sender includes them.
Can received invoices be filtered by date for a daily catch-up?
date_from / date_to filter by the last change — a new invoice or any status change — and accept a date or a time (2026-10-19 or 2026-10-19T08:00:00Z; no offset means UTC). sort=desc (default) or sort=asc orders by the same date. The same parameters work on sent invoices. There is no status filter.
Daily catch-up: GET /invoices/received?date_from=<last sync>&sort=asc&limit=100
Sending invoices
How many invoices can one bulk request carry?
There is no fixed maximum. Each invoice is validated and processed on its own — one failure does not block the others — and the response is 207 with a result per invoice. Each bulk request counts once against the rate limit.
Why was an invoice sent although the entity requires approval?
It was pushed without "bypass_send_approval": false. The option defaults to true, so an invoice pushed through the API is sent without waiting for approval. Invoices from the dashboard or a connected accounting system still wait.
How do I make an API invoice wait for approval?
Send "bypass_send_approval": false on the push, and again on every PATCH that resubmits it — each one decides for itself. The entity must have approval switched on; otherwise nothing waits.
Which errors come back immediately, and which later?
Immediately, in the response to the POST:
| Status | Meaning |
|---|---|
| 202 | Accepted and queued for sending |
| 400 | Invalid request, or a required field is missing |
| 404 | Entity not found, or not reachable by your application |
| 409 | The invoice number is already used for this entity |
| 422 | Fails a PINT-AE rule — errors lists each one; nothing is stored |
| 429 | Rate limit exceeded — wait Retry-After seconds |
Later, through the status endpoint and webhooks:
| Status | Meaning |
|---|---|
| VALIDATION_FAILED | The re-check just before sending failed — usually the entity or exchange rate changed after acceptance |
| Peppol results | Sent, delivered or failed on the Peppol network |
POST /invoices/validate runs the same validation without storing or sending anything.
Is the line tax_amount checked against amount × rate?
Not per line — it is used exactly as sent. Per VAT category, the standard-rated tax must equal its taxable amount × 5% within ±0.02 (aligned-ibrp-s-09). An S line must carry tax; Z, E, O, AE and N lines must carry 0.
Can a UAE buyer be addressed by participant_id alone, without a TRN?
Yes. Send "participant_id": "0235:<TIN>", or the id with "participant_scheme": "0235"; buyer.trn is then not required, and the id is used exactly as sent. One exception: an invoice with a reverse-charge (AE) line needs a valid 15-digit buyer.trn (ibr-103-ae).
Accounts and resellers
Can the account I already have become a reseller too?
Yes. Email Tax Star and ask for reseller access on your account; only a Tax Star admin can switch it on. Nothing you have changes — your companies, your roles and your password stay as they are. You get a second, separate password for the Reseller dashboard, and your OAuth apps can call the reseller endpoints as well as everything they already could.
What is the difference between an account type and a role?
The account type — ordinary, reseller account, or ordinary with reseller access — decides which products you sign in to and what your apps can call. A role — Admin, Editor, Approver or Viewer — is held on one company and decides what you can do there.