to navigate · to open See all results
GET /api/v1/billing/invoices

List billing invoices

Read paginated AssetCenter invoices, payment status, amounts, currency, and PDF links for the token's organization.

Last updated

Request

GET /api/v1/billing/invoices

Requires billing:read. Send Authorization: Bearer YOUR_API_TOKEN and Accept: application/json. No request body is supported. Billing access and organization scope.

Query parameters

per_page integer Optional
Number of invoices to request, from 1 to 100. Defaults to 25.
cursor string Optional
Opaque continuation value from the previous response's meta.next_cursor. Omit for the first page. Pass it unchanged and URL-encoded; it is bound to the organization and its billing customer.

Only these parameters are supported. page, starting_after, customer IDs, organization selectors, filters, and Stripe expansion parameters return 422.

Example

cURL / Bash
curl --get "https://my.assetcenter.app/api/v1/billing/invoices" \
  --header "Authorization: Bearer $ASSETCENTER_API_TOKEN" \
  --header "Accept: application/json" \
  --data-urlencode "per_page=25"

For another page, follow links.next with the same headers, or add --data-urlencode "cursor=CURSOR_FROM_PREVIOUS_RESPONSE" to the request.

Response

200 OK. Example of the final page:

JSON
{
  "data": [
    {
      "id": "in_example",
      "number": "AC-0001",
      "created_at": "2026-09-01T00:00:00+00:00",
      "due_at": null,
      "status": "paid",
      "paid": true,
      "currency": "usd",
      "total": 3900,
      "amount_due": 3900,
      "amount_paid": 3900,
      "amount_remaining": 0,
      "pdf_url": "https://example.com/invoice.pdf"
    }
  ],
  "links": {"next": null},
  "meta": {
    "organization_id": 42,
    "per_page": 25,
    "has_more": false,
    "next_cursor": null
  }
}

Invoices are ordered newest first. All invoice statuses are included: draft, open, paid, uncollectible, and void. paid is true when status is paid. number and pdf_url can be null, particularly for drafts. created_at and nullable due_at use UTC ISO 8601 timestamps.

Money fields are integers in the currency's minor unit. For example, 3900 with usd means USD 39.00, while 3900 with jpy means JPY 3,900. total is the invoice total; amount_due reflects the amount to collect after balances and credits; amount_paid and amount_remaining describe payment progress. The total does not have the customer's starting balance added to it.

pdf_url is the provider's invoice download URL. Fetch invoices again for a current link; treat invoice PDFs as private billing information. No billing portal or payment-management URL is returned.

When meta.has_more is true, links.next and meta.next_cursor provide the next page. Continue until they are null. There is no page number, total count, or last-page count. A malformed, modified, foreign-organization, or no-longer-valid cursor returns 422; restart without a cursor. Only follow continuation links on your API host.

An organization without a Stripe customer, or with no invoices, receives an empty data array with has_more: false. A provider failure returns 503, rather than an empty successful collection.

Errors

401 means authentication is invalid or the token has expired or been revoked. 403 means billing:read or the creator's active administrator access is missing. Invalid or unsupported inputs return 422. Invoice requests share an additional limit of 30 requests per minute per organization, across its tokens, alongside the standard API limits. 429 includes Retry-After.

When invoice retrieval fails, the endpoint returns 503 Service Unavailable:

JSON
{
  "message": "Invoices are temporarily unavailable. Please try again later.",
  "code": "billing_unavailable"
}

Retry with backoff. The plan and usage endpoint remains available during a Stripe outage. Errors and rate limits.