Skip to content

List your subscriptions

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

GET/api/v1/portal/me/subscriptions

Lists the signed-in customer's subscriptions with this brand, newest first: status, plan and quantity, the current period, discounts, a scheduled change or cancellation, and what the brand's portal settings let the customer do with each (actions). Customer portal only (portal:read).

At a glance

  • REST: GET /api/v1/portal/me/subscriptions
  • MCP tool: portal_subscriptions_list
  • Operation ID: portal.subscriptions.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[].idsub_… ID
data[].object"portal_subscription"
data[].statusone of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled
data[].currencystring
data[].itemsarray of object
data[].items[].priceIdprice_… ID
data[].items[].productIdprod_… ID
data[].items[].productNamestring
data[].items[].priceNamestring or nullThe price's nickname, e.g. “Pro, monthly”.
data[].items[].intervalobject
data[].items[].interval.intervalone of day, week, month, year
data[].items[].interval.intervalCountinteger
data[].items[].usageTypeone of licensed, metered
data[].items[].unitAmountmoney or nullA per-unit price's amount per unit and period (null for tiered and metered prices).
data[].items[].taxBehaviorone of inclusive, exclusiveexclusive: tax is added on the invoice.
data[].items[].idsi_… ID
data[].items[].quantityinteger
data[].items[].amountmoney or nullThe item's full-period amount at its quantity, before discounts (null for metered items).
data[].collectionMethodone of charge_automatically, send_invoicecharge_automatically (your card is charged) or send_invoice (paid by bank transfer).
data[].paymentMethodIdpm_… ID or nullThe card this subscription charges (null: your default card).
data[].currentPeriodStartdate-time
data[].currentPeriodEnddate-time
data[].trialEnddate-time or null
data[].cancelAtPeriodEndboolean
data[].cancelAtdate-time or null
data[].canceledAtdate-time or null
data[].endedAtdate-time or null
data[].cancellationobject or null
data[].discountsarray of object
data[].discounts[].iddisc_… ID
data[].discounts[].namestringThe coupon's name.
data[].discounts[].percentOffPpmstring or nullParts per million as a string (20% = "200000").
data[].discounts[].amountOffmoney or null
data[].discounts[].startdate-time
data[].discounts[].enddate-time or nullWhen it stops applying (null: for as long as the subscription runs).
data[].scheduledChangeobject or nullA change that applies at effectiveAt (a downgrade waits for the period end).
data[].actionsobjectWhat you can do with this subscription now, as the brand's portal settings allow.
data[].actions.switch_planboolean
data[].actions.change_quantityboolean
data[].actions.apply_promotion_codeboolean
data[].actions.cancelboolean
data[].actions.reactivateboolean
data[].actions.change_payment_methodboolean
data[].cancelBehaviorone of period_end, immediateHow cancelling here ends the subscription.
data[].collectCancelReasonbooleanCancelling asks why (optional answers).
data[].versionintegerSend it back as expectedVersion to change what you saw.
data[].createdAtdate-time
has_moreboolean
next_cursorstring or null

Examples

One active plan

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

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "sub_01m4tx5nj8emwbyf7y9vcf48c0",
      "object": "portal_subscription",
      "status": "active",
      "currency": "EUR",
      "items": [
        {
          "priceId": "price_01m4tx5nj8emwbyf7y9vcf48c2",
          "productId": "prod_01m4tx5nj8emwbyf7y9vcf48c4",
          "productName": "Genno Plus",
          "priceName": "Plus, monthly",
          "interval": {
            "interval": "month",
            "intervalCount": 1
          },
          "usageType": "licensed",
          "unitAmount": {
            "amount": "9000000",
            "currency": "EUR"
          },
          "taxBehavior": "inclusive",
          "id": "si_01m4tx5nj8emwbyf7y9vcf48c1",
          "quantity": 1,
          "amount": {
            "amount": "9000000",
            "currency": "EUR"
          }
        }
      ],
      "collectionMethod": "charge_automatically",
      "paymentMethodId": null,
      "currentPeriodStart": "2026-10-20T09:00:00.000Z",
      "currentPeriodEnd": "2026-11-20T10:00:00.000Z",
      "trialEnd": null,
      "cancelAtPeriodEnd": false,
      "cancelAt": null,
      "canceledAt": null,
      "endedAt": null,
      "cancellation": null,
      "discounts": [],
      "scheduledChange": null,
      "actions": {
        "switch_plan": true,
        "change_quantity": false,
        "apply_promotion_code": true,
        "cancel": true,
        "reactivate": false,
        "change_payment_method": true
      },
      "cancelBehavior": "period_end",
      "collectCancelReason": true,
      "version": 4,
      "createdAt": "2026-09-20T09:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A 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 subscription and wallet 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.