List invoices
const url = 'https://api.aetherplatform.cloud/api/v1/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/billing/invoices?limit=50';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.aetherplatform.cloud/api/v1/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/billing/invoices?limit=50' \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Organization UUID.
Query Parameters
Section titled “Query Parameters”Opaque cursor (a UUID) for pagination; pass back the prior page’s next_cursor.
Maximum number of items per page (1-100, default 50).
Responses
Section titled “Responses”A page of invoices.
object
An invoice as issued. The document is this record: issuer, buyer and tax rule are frozen at issue time and an issued, numbered invoice is never edited — a change (a discount code applied to it) voids it and issues a replacement under the next number, the two linked by replaces_invoice_id / replaced_by_invoice_id. A billing period has exactly one invoice that is not void.
object
The customer-facing identity, AE-YYYY-NNNN, from a gapless series. Assigned once at issue and never reused; a re-issue gets the next number and the voided invoice keeps its own.
The tax rate applied, in basis points (1900 = 19 %); 0 when no tax is charged.
The statement printed on the invoice explaining the tax treatment (for example why no VAT is charged); empty when there is none.
The amount owed, and exactly the amount a payment charges — there is no separate charged amount.
issued until paid, then paid; void for an invoice that was re-issued (see replaced_by_invoice_id). A failed payment is not a status: the invoice stays issued and the failure is recorded in last_payment_error. An invoice whose total is 0 is paid from the moment it is issued. Clients must tolerate a value they do not know.
The selling entity as it was when the invoice was issued. A historical record: every field is always present, as an empty string when it has no value.
object
Whether the issuer was VAT-registered at issue time. It does not by itself mean VAT was charged — see the invoice’s tax_rate_bp.
The customer as they were when the invoice was issued. A historical record: every field is always present, as an empty string when it has no value. Contains personal data (names, addresses, email).
object
The address of a hosted PDF, when one exists; omitted otherwise. No invoice carries one today.
When the invoice was paid; omitted until it is.
How many payment attempts have been started for this invoice (automatic and manual together). Copied onto a replacement when the invoice is re-issued.
A sanitised decline code or short message from the most recent failed attempt — never a raw payment-provider error. Omitted when no attempt has failed; cleared when the invoice is paid.
When the most recent payment attempt was made; omitted when there has been none.
True while a payment for this invoice has been started and has not reached a final outcome (for example while a 3-D Secure challenge is open). No second payment is started while this is true; the pay endpoint answers requires_action or processing instead.
The organization’s discount (OrgDiscount.id) that was active when the invoice was issued, whether or not its scope matched any line; omitted when there was none. Provenance only — what the discount did is in each line’s discount_cents.
When this document was issued. A replacement carries its own, later issued_at.
Where the payment period counts from. Equal to issued_at for an invoice issued at month close, and copied unchanged onto a replacement, so re-issuing an invoice never extends the time to pay.
When the invoice was voided; omitted unless status is void.
On a replacement: the id of the voided invoice it replaces. Omitted on an invoice issued at month close.
On a voided invoice: the id of the invoice that replaced it — the one to show and to pay. Omitted otherwise.
Examplegenerated
{ "items": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "invoice_number": "example", "org_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "period_start": "2026-04-15T12:00:00Z", "period_end": "2026-04-15T12:00:00Z", "subtotal_cents": 1, "tax_cents": 1, "tax_rate_bp": 1, "tax_note": "example", "total_cents": 1, "status": "example", "issuer": { "legal_name": "example", "address_line1": "example", "address_line2": "example", "city": "example", "postal_code": "example", "country_code": "example", "company_number": "example", "vat_registered": true, "vat_id": "example", "tax_note": "example" }, "buyer": { "org_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example", "customer_type": "example", "legal_name": "example", "first_name": "example", "last_name": "example", "billing_address": "example", "primary_contact": "example", "billing_email": "example", "vat_id": "example", "country_code": "example" }, "pdf_url": "example", "created_at": "2026-04-15T12:00:00Z", "paid_at": "2026-04-15T12:00:00Z", "payment_attempts": 1, "last_payment_error": "example", "last_payment_at": "2026-04-15T12:00:00Z", "payment_in_flight": true, "discount_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "issued_at": "2026-04-15T12:00:00Z", "due_clock_start_at": "2026-04-15T12:00:00Z", "voided_at": "2026-04-15T12:00:00Z", "replaces_invoice_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "replaced_by_invoice_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" } ], "next_cursor": "example"}Missing or invalid credentials.
object
object
A stable, machine-readable error code.
object
The platform status page (https://status.aetherplatform.cloud). Present on 5xx answers written by the API’s error writer and on no other; absent, not null, on 4xx.
The payment provider’s decline code. Present only on 402 payment_declined; it is its own field and is never folded into message.
Present on exactly these errors of the invoice pay and pay/confirm endpoints: 402 payment_declined, 402 payment_method_required, 409 invoice_already_paid, 409 invoice_not_issued, 409 invoice_below_minimum, 409 payment_not_in_flight, and 409 invoice_void when the void invoice was replaced. It is the id of the live invoice, which after a re-issue is the replacement and not the id in the request URL (on 409 invoice_void from pay/confirm it is the replacement’s id). Absent on every other error — 400 (including discount_code_invalid), 403, 404, the discount_* 409s, 409 invoice_void with no replacement (nothing live to name), every 5xx and 503 code — and never null.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": [ { "field": "example", "code": "example", "message": "example" } ], "status_url": "https://example.com", "decline_code": "example", "invoice_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }}Refused by the organization role policy (see Authorization in the API description). error.code is forbidden when the caller is not a member of the organization (or the API token belongs to another organization), insufficient_role when the caller’s organization role is below the operation’s minimum role, and token_not_permitted when the request was authenticated with an API token on an operation API tokens may not use (the API Tokens operations; the handler-gated operations named in the API description: deleting the organization, changing a member’s role or payment_mode, paying an invoice including its confirm step, and discounts; and for a cluster-pinned machine token every operation except the loadbalancer-ips and loadbalancer-vms operations). email_unverified when a portal user’s e-mail address is not verified (see Authentication).
object
object
A stable, machine-readable error code.
object
The platform status page (https://status.aetherplatform.cloud). Present on 5xx answers written by the API’s error writer and on no other; absent, not null, on 4xx.
The payment provider’s decline code. Present only on 402 payment_declined; it is its own field and is never folded into message.
Present on exactly these errors of the invoice pay and pay/confirm endpoints: 402 payment_declined, 402 payment_method_required, 409 invoice_already_paid, 409 invoice_not_issued, 409 invoice_below_minimum, 409 payment_not_in_flight, and 409 invoice_void when the void invoice was replaced. It is the id of the live invoice, which after a re-issue is the replacement and not the id in the request URL (on 409 invoice_void from pay/confirm it is the replacement’s id). Absent on every other error — 400 (including discount_code_invalid), 403, 404, the discount_* 409s, 409 invoice_void with no replacement (nothing live to name), every 5xx and 503 code — and never null.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": [ { "field": "example", "code": "example", "message": "example" } ], "status_url": "https://example.com", "decline_code": "example", "invoice_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }}