Skip to content

List the credit packs you can buy

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

GET/api/v1/portal/me/credit_packs

Lists the brand's active credit packs in the portal's mode, newest first: fixed packs with their price, credits, bonus credits and expiry, and custom-amount packs with their minimum, maximum and suggested amount. Top up with portal.wallets.top_up. Customer portal only (portal:read).

At a glance

  • REST: GET /api/v1/portal/me/credit_packs
  • MCP tool: portal_credit_packs_list
  • Operation ID: portal.credit_packs.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[].priceIdprice_… ID
data[].object"portal_credit_pack"
data[].productNamestring
data[].namestring or nullThe price's nickname, e.g. “€25 credits”.
data[].currencystring
data[].amountmoney or nullA fixed pack's price (null for a custom amount).
data[].customAmountobject or null
data[].creditsmoney or nullThe credits a fixed pack adds (a custom amount follows the brand's basis).
data[].bonusCreditsmoney or null
data[].expiresAfterDaysinteger or null
data[].taxBehaviorone of inclusive, exclusive
has_moreboolean
next_cursorstring or null

Examples

A €25 pack and any amount

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

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "priceId": "price_01m4tx5nj8emwbyf7y9vcf48c9",
      "object": "portal_credit_pack",
      "productName": "Genno credits",
      "name": "€25 credits",
      "currency": "EUR",
      "amount": {
        "amount": "25000000",
        "currency": "EUR"
      },
      "customAmount": null,
      "credits": {
        "amount": "25000000",
        "currency": "EUR"
      },
      "bonusCredits": null,
      "expiresAfterDays": null,
      "taxBehavior": "inclusive"
    },
    {
      "priceId": "price_01m4tx5nj8emwbyf7y9vcf48ca",
      "object": "portal_credit_pack",
      "productName": "Genno credits",
      "name": "Any amount",
      "currency": "EUR",
      "amount": null,
      "customAmount": {
        "min": {
          "amount": "5000000",
          "currency": "EUR"
        },
        "max": {
          "amount": "5000000000",
          "currency": "EUR"
        },
        "preset": {
          "amount": "50000000",
          "currency": "EUR"
        }
      },
      "credits": null,
      "bonusCredits": null,
      "expiresAfterDays": null,
      "taxBehavior": "inclusive"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
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: validation_failed, api_version_unsupported, authentication_required, api_key_invalid, scope_required, resource_not_found, dry_run_not_supported, rate_limited, internal_error.