CommetCommet
GitHubDiscordStatus
Add feature to plan POSTAdd price to plan POSTCreate plan POSTArchive plan price DELETEDelete plan DELETEDelete regional prices DELETEGet plan GETList plans GETRemove feature from plan DELETESet default price PUTSet plan regional pricing PUTSet plan visibility PUTUpdate plan feature PATCHUpdate plan price PATCHUpdate plan PATCHUpsert regional prices PUT
DocumentationKnowledge BaseBuild with AIAPI ReferenceWebhooks

Create plan

Create a new plan with optional consumption model, visibility, and plan group assignment.

POST
/plans

Create a new plan with optional consumption model, visibility, and plan group assignment.

Authorization

ApiKeyAuth
x-api-key<token>

In: header

Header Parameters

Idempotency-Key?string

Unique key used to safely retry this write for 24 hours without applying it twice.

Length1 <= length <= 200

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/plans" \  -H "Content-Type: application/json" \  -d '{    "name": "string",    "code": "string"  }'
{  "id": "plan_1a2b3c4d",  "name": "Pro",  "code": "pro",  "description": "For growing API products",  "consumptionModel": "metered",  "isPublic": true,  "isDefault": false,  "isFree": false,  "blockOnExhaustion": true,  "sortOrder": 0,  "planGroupId": "group_1a2b3c4d",  "metadata": {},  "createdAt": "2026-09-07T12:00:00.000Z",  "updatedAt": "2026-09-07T12:00:00.000Z",  "features": [    {      "code": "api_calls",      "name": "API Calls",      "type": "usage",      "unitName": "calls",      "enabled": true,      "includedAmount": 1000,      "unlimited": false,      "overage": {        "enabled": false,        "model": null,        "unitPrice": null      },      "regionalPrices": []    }  ],  "prices": [    {      "id": "price_1a2b3c4d",      "billingInterval": "monthly",      "price": 2000,      "isDefault": true,      "trialDays": 0,      "includedBalance": null,      "includedCredits": null,      "offerId": null,      "inheritsFromPriceId": null,      "metadata": {},      "marketPrices": [],      "regionalPrices": []    }  ],  "exchangeRates": [],  "object": "plan",  "livemode": false}
{  "error": {    "type": "validation_error",    "code": "validation_error",    "message": "The request contains an invalid parameter.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/validation_error.md"  }}
{  "error": {    "type": "authentication_error",    "code": "unauthorized",    "message": "A valid API key is required.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/unauthorized.md"  }}
{  "error": {    "type": "authentication_error",    "code": "forbidden",    "message": "You do not have permission to perform this operation.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/forbidden.md"  }}
{  "error": {    "type": "not_found_error",    "code": "not_found",    "message": "The requested resource was not found.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/not_found.md"  }}
{  "error": {    "type": "conflict_error",    "code": "idempotency_in_progress",    "message": "A request with this idempotency key is still being processed.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_in_progress.md"  }}
{  "error": {    "type": "rate_limit_error",    "code": "rate_limited",    "message": "Too many requests. Retry after the interval specified in the Retry-After header.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/rate_limited.md"  }}
{  "error": {    "type": "internal_error",    "code": "internal_error",    "message": "An unexpected error occurred while processing the request.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/internal_error.md"  }}
{  "error": {    "type": "internal_error",    "code": "idempotency_unavailable",    "message": "Idempotency storage is temporarily unavailable. Retry with the same idempotency key.",    "doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_unavailable.md"  }}

Add price to plan POST

Add a base price or a selectable market price variant. Variants inherit their base price outside the markets they override. Configure introductory and promotional benefits through Offers.

Archive plan price DELETE

Archive a price for new subscriptions. Existing subscriptions that selected it continue using its current catalog value.

name*string
Length1 <= length
code*string
Match^[a-z0-9_]+$
Length1 <= length
description?string
consumptionModel?string

Value in

  • "metered"
  • "credits"
  • "balance"
isPublic?boolean
isFree?boolean
blockOnExhaustion?boolean
planGroupId?string
metadata?