Skip to main content
Live keys can read the licenses the calling account holds as licensee, and their current signed revision digests. Licenses the account issued as a talent are not listed yet. Sandbox licenses and revisions are fictional fixtures. The broader lifecycle and revision contract below remains planned for live mode. Start with the runnable quickstart and sandbox support matrix.
A license is a signed agreement between a talent and a licensee that says what may be made with the talent’s facets. Every check, generation and session is decided against one license revision, and every decision names it. This page covers what a license holds, how it changes, and how to confirm you hold the document the talent signed.

Live license reads

GET /v1/licenses and GET /v1/licenses/{license_id} return real licenses only when the calling account is their sole licensee. Delegated connections and representative access remain planned. Use the IDs returned by your list call; another account’s license is not found. current_revision, revision_number and terms_digest identify the current signed revision. The digest covers the full signed terms, not the partial scope returned here. Live revision retrieval is unavailable, so this response cannot reconstruct the signed document. Live scope returns window, required_attributes, release_policy and final_deliverables, plus external_creation only when that grant is explicitly signed. Signed channel and territory labels do not safely map to protocol enums and are omitted. Omitted fields grant nothing. No private reference IDs or source media are returned. external_creation: "images.v1" records prospective permission for still images made in the licensee’s tools with inputs it lawfully holds, subject to request and output checks and mandatory talent release. It does not permit exporting private references. Older licenses without this signed term do not acquire it from make, a creation profile or offPlatformProduction. This is reader support only: no issuance route can add the term yet, and live checks, output submission and receipts remain unavailable. An accepted license is scheduled before its window, active within it and expired at or after its end. Issued licenses are pending_acceptance; declined, revoked and void are preserved. These reads do not run a precheck, evaluate an output or issue a live receipt.

What a license holds

When several licenses could cover a use, a check uses the narrowest one that allows it. Name one with license on the check to choose.

Statuses

The planned lifecycle sends webhooks: license.issued, license.accepted, license.suspended, license.resumed, license.expired, license.declined and license.revoked.

Revisions

Each signed version of a license is a license revision, and a revision’s terms never change. Changing a license means signing a new revision: source_kind is issue, change_request, amend or renew. A revision carries signatures, each with the party (talent, representative or licensee), the signer’s name, method: "passkey" and signed_at, and a document_url for the document as a person reads it. Its status is pending_acceptance, current, superseded or declined. Both sides sign every revision; the first is signed with the license itself. When the talent’s side signs a later one, the license’s pending_revision names it and the licensee receives license.revision_pending. The licensee accepts or declines it at acceptance_url, and current_revision stays in force until it accepts. On acceptance, current_revision moves to the new revision and you receive license.revised. New checks use it at once. Authorizations already issued keep the revision they name. If the licensee declines, you receive license.revision_declined and the license keeps its current revision. To narrow a license without waiting, the talent’s side suspends or revokes it. On the talent’s side, a representative can prepare terms as a license draft. A draft grants nothing: a person signs it with a passkey on a hosted page, and only then does it become a license or a revision.

Terms and scope

A revision returns the license twice:
  • terms is the signed document exactly as signed, with its own camelCase field names. This is what the talent signed and what terms_digest covers.
  • scope is the same terms in normalized, snake_case form, generated from terms so your code can read them. When the two disagree, terms wins.
scope also carries facets, modalities, kinds, purposes, commercial, platforms, sessions, material_access, sublicense, training, disclosure, attribution, escalation_window, post_revocation and compensation. Reasons and findings point at terms by address, such as license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.channels.

The terms digest

terms_digest is sha256: followed by the lowercase hex SHA-256 of the terms object in its tlp-json-1 canonical form: UTF-8 JSON, object keys sorted by Unicode code point, no insignificant whitespace, numbers in shortest round-trip form, and no duplicate keys. Every check, receipt and authorization carries the digest of the revision it relied on, so you can prove which document a decision rests on. Recompute it to confirm you hold that document:
Hash terms, never scope.

Checked and recorded terms

Every term is either checked (Reflections enforces it at the check, the generation or a session sample) or recorded (signed and shown, not enforced). A revision’s enforcement list states which, term by term, with the stage where each checked term is enforced. Exclusivity and conflicts are recorded. See What we enforce.

After a revocation

post_revocation.policy says what happens to outputs already released if the license is revoked: See Revocation.

Compensation

compensation says what the licensee owes the talent: type is none, flat, per_unit or revenue_share. A per_unit rate names its units (outputs, seconds, characters, placements or impressions), a rate and per. A license can set a minimum and a schedule (on_acceptance, monthly or quarterly). Amounts are integers in the currency’s smallest unit, with a lowercase ISO 4217 code. Reflections computes statements from it and never moves money. See Usage and settlement.

Example: Ridgeline’s license K7Q4M2

The signed revision, with scope trimmed to the fields above. terms is complete, so its tlp-json-1 digest is the terms_digest shown:
Ridgeline may make images of Maya Okafor for advertising on social media and its website in the US and Canada until the end of March. Maya Okafor or her manager releases each output, and Ridgeline reports placements monthly. No endpoint can sign, accept or widen a license. To ask for a new or wider one, send a license request; only a signature on the talent’s side makes it a license, and what they sign may differ from what you asked.

Decisions

How a check is decided against a revision.

What we enforce

Checked terms, recorded terms and assurance.

Retrieve a license revision

The revision object in the reference.

Brands and agencies

Requesting, accepting and holding licenses.