Skip to content

Get one of your invoices

The portal.invoices.get operation: GET /api/v1/portal/me/invoices/{invoiceId} in the REST API and the portal_invoices_get tool in the MCP server.

GET/api/v1/portal/me/invoices/{invoiceId}

Returns one of the signed-in customer's issued invoices: its lines, amounts, due date, the PDF link, the bank transfer details of a send_invoice invoice (the invoice number is the payment reference) and whether it can be paid by card now (card). Another customer's invoice reads as missing.

Customer portal only (portal:read).

At a glance

  • REST: GET /api/v1/portal/me/invoices/{invoiceId}
  • MCP tool: portal_invoices_get
  • Operation ID: portal.invoices.get
  • Scope: Brand
  • Permission: portal:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Authentication: A customer signed in to the customer portal (API keys can't call it)
  • Since: M9

Request

Path parameters

FieldTypeDescription
invoiceIdinv_… IDOne of your invoices (inv_…).

Query parameters

This operation takes no query parameters.

Response

200 OK with a JSON object:

FieldTypeDescription
idinv_… ID
object"portal_invoice"
numberstring
kindstringinvoice or receipt.
statusstringopen, paid, void, uncollectible or pending_registration.
issueDatestring
dueDatestring or null
currencystring
totalmoney
creditAppliedmoney or null
amountDuemoney
paidAtdate-time or null
payablebooleanOpen with something due: it can be paid by card in the portal.
pdfPathstring or nullThe PDF's download link, relative to the app URL (null while it is being prepared).
sellerNamestring
linesarray of object
lines[].descriptionstring
lines[].quantityinteger
lines[].amountmoney
bankTransferobject or null
cardobject
card.availableboolean
card.unavailableReasonone of not_open, nothing_due, no_processor or null
card.componentone of fake, stripe_payment_element, redirect or null
card.publishableKeystring or null

Examples

An open invoice

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

Response (200):

JSON
{
  "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…",
  "sellerName": "Etna Labs AG",
  "lines": [
    {
      "description": "Genno Pro (monthly)",
      "quantity": 1,
      "amount": {
        "amount": "120000000",
        "currency": "EUR"
      }
    }
  ],
  "bankTransfer": {
    "accountHolder": "Etna Labs AG",
    "iban": "CH9300762011623852957",
    "bic": "EXMPCHZZXXX",
    "bankName": "Example Bank",
    "reference": "GEN-2026-000042"
  },
  "card": {
    "available": true,
    "unavailableReason": null,
    "component": "fake",
    "publishableKey": null
  }
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400The invoice's ID or another field is malformed.Fix the fields listed in details.issues and send the request again.
resource_not_found404You have no such invoice (another customer's reads the same).Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.
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, dry_run_not_supported, rate_limited, internal_error.