List your persisted billing statements, or compute an on-demand provisional report
const url = 'https://api-omni.linra.net/api/v1/statements?page=1&pageSize=20&mode=report';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://api-omni.linra.net/api/v1/statements?page=1&pageSize=20&mode=report' \ --header 'Authorization: Bearer <token>'Two modes, chosen by the mode query parameter:
- Default (omit
mode, or any value other thanreport): returns your own persisted, immutable, weekly-generated statements, paged, newest first. mode=report: requiresfromANDto; computes and returns a LIVE, NEVER-PERSISTEDBillingDocumentcovering exactly that window — markedisProvisional: true. This is a convenience for ad-hoc reconciliation; it is NOT a substitute for your persisted statements and itssequenceNumber/statementNumberare always null.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Omit for the persisted-statement list; set to report for the on-demand provisional report.
Required when mode=report.
Required when mode=report.
Responses
Section titled “Responses”Either a page of PartnerStatementResponse (default mode) or one provisional BillingDocument (report mode).
object
object
object
object
object
Null for a provisional (mode=report) document.
object
object
object
Null for a provisional (mode=report) document.
object
Examples
mode omitted — persisted statement list
{ "state": "SUCCESS", "payload": { "items": [], "pagination": { "page": 1, "pageSize": 20, "totalCount": 0, "totalPages": 0 } }}mode=report — live, never persisted
{ "state": "SUCCESS", "payload": { "partnerId": "11111111-1111-1111-1111-111111111111", "partnerGlobalId": "PTR-EXAMPLE-0001", "sequenceNumber": null, "statementNumber": null, "isProvisional": true, "periodFrom": "2026-01-01T00:00:00Z", "periodTo": "2026-01-31T23:59:59Z", "generatedAt": "2026-02-01T03:00:00Z", "currency": "SAR", "totalDebits": 1200.5, "totalCredits": 300, "netPosition": -900.5, "lines": [], "documentNature": "This is a commercial billing document for informational and reconciliation purposes. It is NOT a ZATCA-compliant legal tax invoice." }}mode=report without both from and to.
The envelope every /api/v1 ERROR response uses. state carries the machine-readable error code (see the Errors guide).
object
Always null on an error response.
object
object
Examples
{ "state": "VALIDATION_MISSING_REPORT_RANGE", "payload": null, "details": {}}Too many requests — see the Rate limits guide. Retry after the Retry-After header (seconds).
The envelope every /api/v1 ERROR response uses. state carries the machine-readable error code (see the Errors guide).
object
Always null on an error response.
object
object
Example
{ "state": "NOT_FOUND_ORDER", "payload": null}Headers
Section titled “Headers”Seconds to wait before retrying.