Skip to content

Prices tools

MCP tools for Prices: prices_archive, prices_create, prices_get, prices_list, prices_move_lookup_key, prices_update.

  • prices_archive: Archive a price
  • prices_create: Create a price
  • prices_get: Get a price
  • prices_list: List prices
  • prices_move_lookup_key: Move a lookup key to a price
  • prices_update: Update a price

prices_archive

Archive a price. Operation prices.archive · Brand level · permission catalog:write · risk tier write · since M4

Archives a price: it can't be sold any more and leaves the pricing table. Subscriptions and invoices that use it are unaffected. Its lookup key stays until you move it to the new price (prices.move_lookup_key). Archiving an archived price changes nothing; reactivate it with prices.update and active: true.

reason is recorded in the audit log.

Annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (price_…)yes–
reasonstringno(1–500 characters)
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Example

Retire last year's price

Arguments:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
  "reason": "Replaced by the 2027 price",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "nickname": "Pro monthly, per seat",
  "lookupKey": "pro_monthly",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": null,
  "customAmount": null,
  "creditPack": null,
  "recurring": {
    "interval": "month",
    "intervalCount": 1,
    "usageType": "licensed",
    "billingScheme": "tiered",
    "unitAmount": null,
    "tiersMode": "graduated",
    "tiers": [
      {
        "upTo": 10,
        "unitAmountMicros": "12000000",
        "flatAmount": null
      },
      {
        "upTo": "inf",
        "unitAmountMicros": "9000000",
        "flatAmount": null
      }
    ],
    "trialDays": 14,
    "includedCredits": null,
    "metered": null
  },
  "active": false,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}

prices_create

Create a price. Operation prices.create · Brand level · permission catalog:write · risk tier write · since M4

Creates a price for one of the brand's products. Types:

  • one_time: a fixed amount, or a customAmount range the buyer chooses from;
  • credit_pack: like one-time, plus creditPack (bonusCredits granted as promo credits, expiresAfterDays). A fixed pack's credits equal its amount; what the wallet receives follows the brand's credit basis (net by default);
  • recurring: per_unit (unitAmount × quantity) or tiered (graduated or volume tiers, each with an optional flatAmount), with optional trialDays and includedCredits. Recurring prices are sold with subscriptions.

A recurring price with usageType: metered takes its quantity from usage events (usage_events.create), billed in arrears. recurring.metered names the meter (e.g. api.calls), its aggregation per period (sum, max or last) and its pricing: per_unit uses the price's unitAmount or tiers per unit of usage; percent_of_amount reads the quantity as an amount in micros of the price's currency and charges ratePpm (0.4% = "4000"), with no unit amount or tiers. Optional: includedQuantity (free per period), minimumCharge and maximumCharge (per period). Every metered price of a meter uses the same aggregation and pricing (and, for percent of amount, the same currency).

Money is { amount: "<integer micros>", currency } (12.50 EUR = "12500000"). Charged amounts use whole minor units of the currency; unit prices may be finer (unitAmountMicros "2500" = 0.0025). taxBehavior says whether the amounts include tax (inclusive, required for consumer prices in the EU and UK) or not (exclusive).

Once a checkout session or payment uses the price, what it charges can't change: create a new price and move the lookup key to it (prices.move_lookup_key).

Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
productIdID (prod_…)yesThe product the price belongs to.
typeone of one_time, recurring, credit_packyesone_time, credit_pack or recurring (licensed or metered: per unit or tiered).
currencystringyesISO 4217 currency code; every amount of the price uses it.
taxBehaviorone of inclusive, exclusiveyesinclusive: the amount includes tax (consumer prices in the EU and UK); exclusive: tax is added.
nicknamestringnoAn internal label, never shown to customers. (1–120 characters)
lookupKeystringnoA stable name for the price, unique in the brand and mode, e.g. pro_monthly.
amountobjectnoOne-time and credit-pack prices: the fixed amount (whole minor units).
customAmountobjectnoOne-time and credit-pack prices: let the buyer choose an amount in this range instead.
creditPackobjectnoCredit packs: the credit terms.
recurringobjectnoRecurring prices: the billing period and scheme.
metadataobjectnoYour own key-value pairs (at most 50 keys). On updates the whole set is replaced.
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Examples

Monthly per-seat price, graduated tiers, 14-day trial

Arguments:

JSON
{
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "nickname": "Pro monthly, per seat",
  "lookupKey": "pro_monthly",
  "recurring": {
    "interval": "month",
    "billingScheme": "tiered",
    "tiersMode": "graduated",
    "tiers": [
      {
        "upTo": 10,
        "unitAmountMicros": "12000000"
      },
      {
        "upTo": "inf",
        "unitAmountMicros": "9000000"
      }
    ],
    "trialDays": 14
  },
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "nickname": "Pro monthly, per seat",
  "lookupKey": "pro_monthly",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": null,
  "customAmount": null,
  "creditPack": null,
  "recurring": {
    "interval": "month",
    "intervalCount": 1,
    "usageType": "licensed",
    "billingScheme": "tiered",
    "unitAmount": null,
    "tiersMode": "graduated",
    "tiers": [
      {
        "upTo": 10,
        "unitAmountMicros": "12000000",
        "flatAmount": null
      },
      {
        "upTo": "inf",
        "unitAmountMicros": "9000000",
        "flatAmount": null
      }
    ],
    "trialDays": 14,
    "includedCredits": null,
    "metered": null
  },
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z"
}

Metered: 0.4% of the processed volume, at least €5 a month

Arguments:

JSON
{
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "exclusive",
  "nickname": "Volume fee",
  "lookupKey": "volume_monthly",
  "recurring": {
    "interval": "month",
    "usageType": "metered",
    "metered": {
      "meter": "payments.volume",
      "pricing": "percent_of_amount",
      "ratePpm": "4000",
      "minimumCharge": {
        "amount": "5000000",
        "currency": "EUR"
      }
    }
  },
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y8",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "nickname": "Volume fee",
  "lookupKey": "volume_monthly",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "exclusive",
  "amount": null,
  "customAmount": null,
  "creditPack": null,
  "recurring": {
    "interval": "month",
    "intervalCount": 1,
    "usageType": "metered",
    "billingScheme": "per_unit",
    "unitAmount": null,
    "tiersMode": null,
    "tiers": null,
    "trialDays": null,
    "includedCredits": null,
    "metered": {
      "meter": "payments.volume",
      "aggregation": "sum",
      "pricing": "percent_of_amount",
      "ratePpm": "4000",
      "includedQuantity": null,
      "minimumCharge": {
        "amount": "5000000",
        "currency": "EUR"
      },
      "maximumCharge": null
    }
  },
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z"
}

Metered: €0.002 per API call after 10,000 free calls a month

Arguments:

JSON
{
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "exclusive",
  "nickname": "API calls",
  "lookupKey": "api_calls_monthly",
  "recurring": {
    "interval": "month",
    "usageType": "metered",
    "unitAmount": {
      "amount": "2000",
      "currency": "EUR"
    },
    "metered": {
      "meter": "api.calls",
      "aggregation": "sum",
      "includedQuantity": "10000"
    }
  },
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y9",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "nickname": "API calls",
  "lookupKey": "api_calls_monthly",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "exclusive",
  "amount": null,
  "customAmount": null,
  "creditPack": null,
  "recurring": {
    "interval": "month",
    "intervalCount": 1,
    "usageType": "metered",
    "billingScheme": "per_unit",
    "unitAmount": {
      "amount": "2000",
      "currency": "EUR"
    },
    "tiersMode": null,
    "tiers": null,
    "trialDays": null,
    "includedCredits": null,
    "metered": {
      "meter": "api.calls",
      "aggregation": "sum",
      "pricing": "per_unit",
      "ratePpm": null,
      "includedQuantity": "10000",
      "minimumCharge": null,
      "maximumCharge": null
    }
  },
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z"
}

A €10 credit pack with €2 bonus credits

Arguments:

JSON
{
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y1",
  "type": "credit_pack",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "lookupKey": "credits_10",
  "amount": {
    "amount": "10000000",
    "currency": "EUR"
  },
  "creditPack": {
    "bonusCredits": {
      "amount": "2000000",
      "currency": "EUR"
    },
    "expiresAfterDays": 365
  },
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y4",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y1",
  "nickname": null,
  "lookupKey": "credits_10",
  "type": "credit_pack",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": {
    "amount": "10000000",
    "currency": "EUR"
  },
  "customAmount": null,
  "creditPack": {
    "credits": {
      "amount": "10000000",
      "currency": "EUR"
    },
    "bonusCredits": {
      "amount": "2000000",
      "currency": "EUR"
    },
    "expiresAfterDays": 365
  },
  "recurring": null,
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z"
}

A one-time price

Arguments:

JSON
{
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y1",
  "type": "one_time",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": {
    "amount": "49000000",
    "currency": "EUR"
  },
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y5",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y1",
  "nickname": null,
  "lookupKey": null,
  "type": "one_time",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": {
    "amount": "49000000",
    "currency": "EUR"
  },
  "customAmount": null,
  "creditPack": null,
  "recurring": null,
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z"
}

prices_get

Get a price. Operation prices.get · Brand level · permission catalog:read · risk tier read · since M4

Returns one price of the brand's catalog in the request's mode, archived or not. used says whether a checkout session or payment has referenced it (then what it charges can't change).

Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (price_…)yes–
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Read-only: changes nothing; idempotency_key is ignored.

Errors

Example

A monthly per-seat price

Arguments:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "nickname": "Pro monthly, per seat",
  "lookupKey": "pro_monthly",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": null,
  "customAmount": null,
  "creditPack": null,
  "recurring": {
    "interval": "month",
    "intervalCount": 1,
    "usageType": "licensed",
    "billingScheme": "tiered",
    "unitAmount": null,
    "tiersMode": "graduated",
    "tiers": [
      {
        "upTo": 10,
        "unitAmountMicros": "12000000",
        "flatAmount": null
      },
      {
        "upTo": "inf",
        "unitAmountMicros": "9000000",
        "flatAmount": null
      }
    ],
    "trialDays": 14,
    "includedCredits": null,
    "metered": null
  },
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z"
}

prices_list

List prices. Operation prices.list · Brand level · permission catalog:read · risk tier read · since M4

Lists the brand's prices in the request's mode, newest first. Filter with productId, type, currency, active (true or false) and lookupKey (at most one price has it).

Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page).

Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
productIdID (prod_…)no–
typeone of one_time, recurring, credit_packno–
currencystringno–
activestringnoOnly active (true) or archived (false) prices.
lookupKeystringnoA stable name for the price, unique in the brand and mode, e.g. pro_monthly.
limitintegerno(1–100)
starting_afterID (price_…)no–
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Read-only: changes nothing; idempotency_key is ignored.

Errors

Examples

The price behind a lookup key

Arguments:

JSON
{
  "lookupKey": "pro_monthly",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz"
}

Result output:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
      "object": "price",
      "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
      "livemode": false,
      "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
      "nickname": "Pro monthly, per seat",
      "lookupKey": "pro_monthly",
      "type": "recurring",
      "currency": "EUR",
      "taxBehavior": "inclusive",
      "amount": null,
      "customAmount": null,
      "creditPack": null,
      "recurring": {
        "interval": "month",
        "intervalCount": 1,
        "usageType": "licensed",
        "billingScheme": "tiered",
        "unitAmount": null,
        "tiersMode": "graduated",
        "tiers": [
          {
            "upTo": 10,
            "unitAmountMicros": "12000000",
            "flatAmount": null
          },
          {
            "upTo": "inf",
            "unitAmountMicros": "9000000",
            "flatAmount": null
          }
        ],
        "trialDays": 14,
        "includedCredits": null,
        "metered": null
      },
      "active": true,
      "used": false,
      "usedAt": null,
      "metadata": {},
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

A product's active prices

Arguments:

JSON
{
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "active": "true",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz"
}

Result output:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
      "object": "price",
      "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
      "livemode": false,
      "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
      "nickname": "Pro monthly, per seat",
      "lookupKey": "pro_monthly",
      "type": "recurring",
      "currency": "EUR",
      "taxBehavior": "inclusive",
      "amount": null,
      "customAmount": null,
      "creditPack": null,
      "recurring": {
        "interval": "month",
        "intervalCount": 1,
        "usageType": "licensed",
        "billingScheme": "tiered",
        "unitAmount": null,
        "tiersMode": "graduated",
        "tiers": [
          {
            "upTo": 10,
            "unitAmountMicros": "12000000",
            "flatAmount": null
          },
          {
            "upTo": "inf",
            "unitAmountMicros": "9000000",
            "flatAmount": null
          }
        ],
        "trialDays": 14,
        "includedCredits": null,
        "metered": null
      },
      "active": true,
      "used": false,
      "usedAt": null,
      "metadata": {},
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

prices_move_lookup_key

Move a lookup key to a price. Operation prices.move_lookup_key · Brand level · permission catalog:write · risk tier write · since M4

Moves a lookup key to this price, taking it from the price that has it (if any) in the same step. Use it when a new price replaces an old one: integrators that look prices up by key (prices.list?lookupKey=…, checkout sessions) get the new price at once, and nothing references a price ID that changed.

The price must be active and have no other lookup key (remove that first). Moving a key to the price that already has it changes nothing. Both prices get a price.updated event.

Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (price_…)yesThe price that gets the key.
lookupKeystringyesA stable name for the price, unique in the brand and mode, e.g. pro_monthly.
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Example

Point pro_monthly at the new price

Arguments:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y3",
  "lookupKey": "pro_monthly",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y3",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "nickname": "Pro monthly, per seat",
  "lookupKey": "pro_monthly",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": null,
  "customAmount": null,
  "creditPack": null,
  "recurring": {
    "interval": "month",
    "intervalCount": 1,
    "usageType": "licensed",
    "billingScheme": "tiered",
    "unitAmount": null,
    "tiersMode": "graduated",
    "tiers": [
      {
        "upTo": 10,
        "unitAmountMicros": "12000000",
        "flatAmount": null
      },
      {
        "upTo": "inf",
        "unitAmountMicros": "9000000",
        "flatAmount": null
      }
    ],
    "trialDays": 14,
    "includedCredits": null,
    "metered": null
  },
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}

prices_update

Update a price. Operation prices.update · Brand level · permission catalog:write · risk tier write · since M4

Changes a price's nickname, lookup key, metadata or active (false archives it, true reactivates it). Send only the fields to change; null clears an optional value; metadata replaces the whole map.

While no checkout session or payment has used the price (used: false), its tax behaviour and amounts can change as well: each of amount, customAmount, creditPack and recurring replaces the stored value. Once used, those are fixed (price_immutable): create a new price, move the lookup key to it with prices.move_lookup_key, and archive this one. The type and currency never change.

A lookup key held by another price isn't moved silently (lookup_key_taken); use prices.move_lookup_key.

Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (price_…)yes–
nicknamestring or nullno–
lookupKeystring or nullnoSet a free lookup key, or null to remove it. To take one from another price, use prices.move_lookup_key.
metadataobjectnoYour own key-value pairs (at most 50 keys). On updates the whole set is replaced.
activebooleannofalse archives the price, true reactivates it.
taxBehaviorone of inclusive, exclusivenoUnused prices only.
amountobject or nullnoUnused prices only: the fixed amount; null removes it.
customAmountobject or nullnoUnused prices only: the custom amount range; null removes it.
creditPackobjectnoUnused credit packs only: the credit terms.
recurringobjectnoUnused recurring prices only: the billing period and scheme.
entity_idID (ent_…)noOptional: the brand's legal entity (ent_…); brand_id alone is enough.
brand_idID (brd_…)noThe brand to act on (brd_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand.
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Brand: pass brand_id with an organization or entity key; a brand key acts on its own brand.
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Example

Rename a price

Arguments:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
  "nickname": "Pro monthly (2026)",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "price_01m4tx5nj8emwbyf7y9vcf47y2",
  "object": "price",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "productId": "prod_01m4tx5nj8emwbyf7y9vcf47y0",
  "nickname": "Pro monthly (2026)",
  "lookupKey": "pro_monthly",
  "type": "recurring",
  "currency": "EUR",
  "taxBehavior": "inclusive",
  "amount": null,
  "customAmount": null,
  "creditPack": null,
  "recurring": {
    "interval": "month",
    "intervalCount": 1,
    "usageType": "licensed",
    "billingScheme": "tiered",
    "unitAmount": null,
    "tiersMode": "graduated",
    "tiers": [
      {
        "upTo": 10,
        "unitAmountMicros": "12000000",
        "flatAmount": null
      },
      {
        "upTo": "inf",
        "unitAmountMicros": "9000000",
        "flatAmount": null
      }
    ],
    "trialDays": 14,
    "includedCredits": null,
    "metered": null
  },
  "active": true,
  "used": false,
  "usedAt": null,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}