Skip to content

List your invoices

The portal.invoices.list operation: GET /api/v1/portal/me/invoices in the REST API and the portal_invoices_list tool in the MCP server.

GET/api/v1/portal/me/invoices

Lists the signed-in customer's issued invoices and receipts, newest first, with the amount due and a download link of each PDF (pdfPath; null for a moment after issue, while the PDF is prepared). Open invoices with something due are payable by card (portal.invoices.pay). Drafts aren't listed.

Paginate with limit (default 20) and starting_after. Customer portal only (portal:read).

At a glance

  • REST: GET /api/v1/portal/me/invoices
  • MCP tool: portal_invoices_list
  • Operation ID: portal.invoices.list
  • Scope: Brand
  • Permission: portal:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Pagination: limit (at most 100) and starting_after
  • Authentication: A customer signed in to the customer portal (API keys can't call it)
  • Since: M9

Request

Query parameters

FieldTypeRequiredDescription
limitinteger (1 to 100)NoPage size, 1 to 100 (default 20).
starting_afterstringNoThe next_cursor of the previous page.

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].idinv_… ID
data[].object"portal_invoice"
data[].numberstring
data[].kindstringinvoice or receipt.
data[].statusstringopen, paid, void, uncollectible or pending_registration.
data[].issueDatestring
data[].dueDatestring or null
data[].currencystring
data[].totalmoney
data[].creditAppliedmoney or null
data[].amountDuemoney
data[].paidAtdate-time or null
data[].payablebooleanOpen with something due: it can be paid by card in the portal.
data[].pdfPathstring or nullThe PDF's download link, relative to the app URL (null while it is being prepared).
has_moreboolean
next_cursorstring or null

Examples

Your latest invoices

HTTP
GET /api/v1/portal/me/invoices
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "inv_01m4tx5nj8emwbyf7y9vcf48b3",
      "object": "portal_invoice",
      "number": "GEN-2026-000042",
      "kind": "invoice",
      "status": "open",
      "issueDate": "2026-10-20",
      "dueDate": "2026-11-03",
      "currency": "EUR",
      "total": {
        "amount": "120000000",
        "currency": "EUR"
      },
      "creditApplied": null,
      "amountDue": {
        "amount": "120000000",
        "currency": "EUR"
      },
      "paidAt": null,
      "payable": true,
      "pdfPath": "/api/v1/invoices/inv_01m4tx5nj8emwbyf7y9vcf48b3/pdf?token=eyJ…"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A field or pagination value is malformed.Fix the fields listed in details.issues and send the request again.
livemode_not_allowed403The portal session is in the other mode than the request.Use test mode, or credentials for the target's mode. Developers need live access granted by an organization owner or admin.
permission_denied403The caller isn't a customer signed in to this brand's portal (operators and API keys use the customer operations).Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, scope_required, resource_not_found, dry_run_not_supported, rate_limited, internal_error.