Temporarily expand an active subscription's feature access using a higher plan in the same plan group. Billing, prices, periods, invoices, and the base subscription remain unchanged.
Temporarily expand an active subscription's feature access using a higher plan in the same plan group. Billing, prices, periods, invoices, and the base subscription remain unchanged.
ApiKeyAuth In: header
Unique key used to safely retry this write for 24 hours without applying it twice.
1 <= length <= 200application/json
TypeScript Definitions
Use the request body type in TypeScript.
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/customers/string/plan-grants" \ -H "Content-Type: application/json" \ -d '{ "subscriptionId": "string", "planId": "string", "reason": "string", "duration": "cycles", "durationCycles": 1 }'{ "id": "grant_1a2b3c4d", "customerId": "cus_1a2b3c4d", "subscriptionId": "sub_1a2b3c4d", "basePlanId": "plan_1a2b3c4d", "planId": "plan_5e6f7a8b", "planReleaseId": "release_5e6f7a8b", "status": "active", "duration": "until_date", "durationCycles": null, "startsAt": "2026-09-07T12:00:00.000Z", "expiresAt": "2026-10-07T12:00:00.000Z", "reason": "Evaluate Business features", "source": "api", "revokedAt": null, "createdAt": "2026-09-07T12:00:00.000Z", "updatedAt": "2026-09-07T12:00:00.000Z", "events": [ { "id": "event_1a2b3c4d", "type": "created", "reason": "Evaluate Business features", "source": "api", "previousExpiresAt": null, "expiresAt": "2026-10-07T12:00:00.000Z", "duration": "until_date", "durationCycles": null, "requestedExpiresAt": "2026-10-07T12:00:00.000Z", "createdAt": "2026-09-07T12:00:00.000Z" } ], "object": "plan_grant", "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" }}1 <= length1 <= length1 <= length <= 5000 < value <= 9007199254740991