CommetCommet
GitHubDiscordStatus
Batch create customers POSTGrant customer credit POSTCreate customer POSTGrant temporary plan access POSTGet customer GETList customer credits GETList customers GETList plan grants GETRevoke remaining customer credit POSTRevoke temporary plan access POSTUpdate customer PATCHUpdate temporary access expiration PATCH
DocumentaciónRecursosConstruir con AIAPI ReferenceWebhooks

Update temporary access expiration

Keep the overlay for a number of the subscription's existing billing cycles, set an exact deadline, or leave it active until revoked. The billing anchor is never reset.

PATCH
/customers/{id}/plan-grants/{grantId}

Keep the overlay for a number of the subscription's existing billing cycles, set an exact deadline, or leave it active until revoked. The billing anchor is never reset.

Authorization

ApiKeyAuth
x-api-key<token>

In: header

Path Parameters

id*string
grantId*string

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 PATCH "https://example.com/customers/string/plan-grants/string" \  -H "Content-Type: application/json" \  -d '{    "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-11-07T12:00:00.000Z",  "reason": "Extended evaluation",  "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"    },    {      "id": "event_5e6f7a8b",      "type": "updated",      "reason": "Extended evaluation",      "source": "api",      "previousExpiresAt": "2026-10-07T12:00:00.000Z",      "expiresAt": "2026-11-07T12:00:00.000Z",      "duration": "until_date",      "durationCycles": null,      "requestedExpiresAt": "2026-11-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"  }}

Update customer PATCH

Update a customer's name, external ID, or metadata.

Create feature POST

Create a new feature. Code must be lowercase alphanumeric with underscores.

reason*string
Length1 <= length <= 500
duration*string
durationCycles*integer
Range0 < value <= 9007199254740991