Licenses
Validity, entitlements, and seat capacity.
What a license includes
A License is what one Organization may distribute. It belongs to that Organization, includes one or more Entitlements, and defines a seatLimit plus validFrom and optional validUntil. The Organization cannot be changed after creation.
Validity and seat capacity
The lifecycle is scheduled, active, expired, or revoked. A License is active for access only after its start, before its end if one exists, and while not revoked. Historical Licenses remain visible for operational history; expiration or revocation does not mean the record was deleted.
Seat capacity is per License. It is distinct from the Workspace's organization-user capacity: several License seats for one external user in the same Organization can count as one organization user for Billing.
An unreleased assignment on an expired License can still be an allocation while no longer granting current access. Releasing a seat on one License may leave another valid License/Grant path in place.
Extend an existing license
Developers can Extend license in Product or call extend License with an absolute, offset-aware validUntil. This means "valid through at least this date": an equal or earlier target succeeds without changing state or emitting an extension event. A forward target must be in the future and after the unchanged start date at transaction time.
The existing License, Organization, unreleased Assignment IDs, customer external user IDs, Entitlements and provisioning history remain. Eligible existing Grant expirations are amended in the same transaction and current Effective Entitlements are reconciled across all Grant sources. No users are reinvited, no additional seats or Workspace organization-user quota are consumed, and no payment is collected.
A naturally expired License can be extended: eligible retained seats regain applicable current access after commit. There was no uninterrupted access during the lapse. Released users stay released; explicitly revoked Grants and Licenses cannot be revived by extension. Scheduled Licenses retain their start date and do not grant early access. Non-expiring Licenses do not need extension.
Ordinary PATCH still locks the Entitlement set and validity fields after any Assignment history. Name and supported seat-limit edits remain available. The explicit extension command is the lifecycle exception for moving expiration forward; it cannot change the start, Organization, Entitlements or seat limit.
Credentials and retries
Extension requires a developer session, current direct Project membership and an Idempotency-Key. Organization administrators and general machine API keys cannot extend Licenses. Retry an uncertain result with the same principal, Project, License, target and key. A completed replay returns its original response snapshot; refresh the License to learn its current state. Each actual extension records one bounded license.extended Audit/Outbox event. Neither a covered target nor a completed replay emits another extension event.
Optional customer payments
Optional Customer payments sets up a merchant with Stripe-hosted onboarding, then creates hosted one-off/recurring Checkout for this same License. A fresh merchant can create its Customer and fixed Price in Product; existing business customers can purchase too. This does not import billing from another Stripe account. Financial management requires the owning Workspace's owner role and direct Project membership. Verified settled coverage reaches the same extension command; a Checkout return, failed payment or subscription status alone never grants access. License, Assignment and Grant identities are retained. Manual extension remains available without Stripe.
Merchant customer payments are separate from BusinessMode Workspace Billing. Disabling synchronization does not cancel Stripe subscriptions or revoke existing access. Unsupported or paid-but-unfulfilled arrangements appear for attention and remain manually renewable.
Related operations
See create License, get License, extend License, set up merchant payments, create payment request, and revoke License. Continue with Members & seats.