List invoices#
/v1/invoicesThe agent group's own invoices, newest issueDate first, plus what the group currently owes across all of them. Filter by status, and by from/to (an ISSUE-DATE window, both inclusive). Page with cursor — the opaque nextCursor from the previous page; a malformed or tampered cursor is a 400, never a crash and never a silent restart at page 1.
DRAFT and CANCELLED invoices are never listed, and asking for either is a 400. Both are unissued: they carry no invoice number and no issue date, and the (issueDate, id) keyset this endpoint pages on cannot express a position after a run of NULL dates — they would appear on page one and silently vanish from page two onwards. A draft has never been sent to anybody and is not a document you hold; a CANCELLED invoice today is only ever an abandoned draft, since an issued invoice is corrected by a credit note and never cancelled.
Credit notes ARE listed, as ordinary rows with creditNoteFor set and an amountDue of zero. The outstanding figure subtracts them: it is issued invoices, less allocated payments, LESS credit notes, so a group whose invoice was fully credit-noted is shown as owing nothing.
Request
curl -X GET 'https://partner-api.elivaas.com/v1/invoices' \
-u "$ELIVAAS_API_KEY:" \
-H 'Content-Type: application/json'const res = await fetch('https://partner-api.elivaas.com/v1/invoices', {
method: 'GET',
headers: {
Authorization: 'Basic ' + Buffer.from(process.env.ELIVAAS_API_KEY + ':').toString('base64'),
'Content-Type': 'application/json',
},
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();import os, requests
res = requests.get(
"https://partner-api.elivaas.com/v1/invoices",
auth=(os.environ["ELIVAAS_API_KEY"], ""),
timeout=30,
)
res.raise_for_status()
data = res.json(){
"data": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"invoiceNumber": "EV-HP/2026-27/000123",
"status": "ISSUED",
"issueDate": "2026-08-01",
"dueDate": "2026-08-15",
"periodFrom": "2026-07-01",
"periodTo": "2026-07-31",
"subtotal": 10000,
"cgst": 900,
"sgst": 900,
"igst": 0,
"discount": 0,
"total": 11800,
"amountPaid": 5000,
"creditedAmount": 1800,
"amountDue": 5000,
"overdueSince": "2026-08-16",
"supplierGstin": "02AAGCI9865C1ZL",
"supplierName": "Elivaas Ventures Pvt Ltd",
"supplierAddress": "string",
"billToGstin": "06AAGCI9865C1ZK",
"billToName": "string",
"billToAddress": "string",
"placeOfSupply": "Himachal Pradesh",
"razorpayOrderId": "order_QAbc123XyZ4567",
"creditNoteFor": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
],
"nextCursor": "string",
"outstanding": 23600,
"oldestDueDate": "2026-08-15",
"outstandingInvoiceCount": 3
}Query parameters#
fromstring<date>Only invoices issued on or after this date (inclusive).
tostring<date>Only invoices issued on or before this date (inclusive).
cursorstringKeyset cursor: the
nextCursorfrom the previous page.sizeinteger<int32>Page size, max 100.
Invoice statuses to filter by. Defaults to all four. DRAFT and CANCELLED are rejected (400), as is any unknown value — never silently ignored.
Responses#
| Status | Meaning |
|---|---|
200 | OK |
400 | Validation failure. The message names the offending parameter. Limits are rejected, never silently clamped: an over-length id list, a page size above 100 or a date window longer than 365 days all land here rather than coming back quietly truncated. |
401 | Missing, malformed, revoked or unknown API key, or an agent group whose distribution access is disabled. Pass the key as the HTTP Basic username with an empty password. |
429 | Rate limit exhausted for this credential. Wait Retry-After seconds before retrying; the budget is per credential, not per IP. |
See Errors for the error body shape and which statuses are worth retrying.