OAuth API

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.

Rate limits →

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.

Token endpoint →

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.

How delivery works →

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.

Received invoice example →

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

List received invoices →

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.

Push multiple invoices →

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.

Invoices pushed through the API →

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.

Invoices pushed through the API →

Which errors come back immediately, and which later?

Immediately, in the response to the POST:

StatusMeaning
202Accepted and queued for sending
400Invalid request, or a required field is missing
404Entity not found, or not reachable by your application
409The invoice number is already used for this entity
422Fails a PINT-AE rule — errors lists each one; nothing is stored
429Rate limit exceeded — wait Retry-After seconds

Later, through the status endpoint and webhooks:

StatusMeaning
VALIDATION_FAILEDThe re-check just before sending failed — usually the entity or exchange rate changed after acceptance
Peppol resultsSent, delivered or failed on the Peppol network

POST /invoices/validate runs the same validation without storing or sending anything.

Invoice status →

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.

How tax amounts are checked →

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).

How a UAE buyer is addressed →

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.

Reseller accounts →

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.

Roles and permissions →