Skip to main content
POST
cURL

Authorizations

Authorization
string
header
required

Your secret key, rk_test_… or rk_live_…, sent as Authorization: Bearer <key>. Keep it on your server. Restricted keys carry only the scopes you give them.

Headers

Reflections-Version
string

The dated API version. Defaults to the version your account is pinned to.

Example:

"2026-10-15"

Idempotency-Key
string

A unique key for this operation, up to 255 characters. In test mode, POST keys are scoped to your account and mode and bind the endpoint and body for 24 hours. A different endpoint or body with the same key is refused.

Initial live check and generation creation require a nonempty key. Each operation has a separate account-scoped namespace; retain the same API key, body and idempotency key for retries within 24 hours of creation. A pending check returns 202 with status: "checking". Completed checks replay their sealed response; successful generation POSTs replay the original accepted 202, so use GET for current state. Live verification is a read-only query that returns a fresh verification ID on each call, without exact response caching.

The broader delegated-account contract also scopes keys to Reflections-Account; delegated requests and the other planned live POST operations remain unsupported.

Maximum string length: 255

Body

application/json
talent
string
required

The talent the license is for. Your mandate for them must include issue_licenses.

Pattern: ^tal_[0-9a-hjkmnp-tv-z]{26}$
kind
enum<string>
default:issue

issue: a new license, with licensee and a full scope. change_request: an answer to a request of kind change; set by license_request. amend: new terms for an active or scheduled license. renew: a new window for an active, scheduled or expired license. Set license_request and the kind follows from the request.

Available options:
issue,
change_request,
amend,
renew
license_request
string

The request this draft answers. The request must be sent. When the draft is signed, the request becomes signed.

Pattern: ^lrq_[0-9a-hjkmnp-tv-z]{26}$
license
string

For amend and renew, the license to change.

Pattern: ^lic_[0-9a-hjkmnp-tv-z]{26}$
licensee
string

For issue without a license_request, the account that will hold the license. It must have hold_licenses.

Pattern: ^acct_[0-9a-hjkmnp-tv-z]{26}$
scope
object

The terms. For issue without a license_request, the full scope. With a license_request, only the terms that differ from what was asked. For amend and renew, only the terms that change; omitted fields keep the current revision's value.

signer
enum<string>
default:talent

Who signs. talent: the talent signs in the Talent Portal and is notified now. representative: a person at your account with issue_licenses signs.

Available options:
talent,
representative
note
string

Shown to the licensee on the acceptance page.

Maximum string length: 1000
expires_at
string<date-time>

When the draft can no longer be signed. At most 30 days ahead, and the default.

metadata
object

Keys and values of your own, returned on the draft.

Response

The draft, open for signature.

id
string
required

The draft's ID, ldr_….

Pattern: ^ldr_[0-9a-hjkmnp-tv-z]{26}$
object
string
required

Always license_draft.

Allowed value: "license_draft"
livemode
boolean
required

true in live mode, false in test mode.

status
enum<string>
required

open until the signer signs or declines it, it is discarded, or it passes expires_at.

Available options:
open,
signed,
declined,
discarded,
expired
kind
enum<string>
required

What signing creates. issue: a new license. change_request: a new revision answering a request of kind change. amend: new terms for license. renew: a new window for license.

Available options:
issue,
change_request,
amend,
renew
talent
string
required

The talent the license is for.

Pattern: ^tal_[0-9a-hjkmnp-tv-z]{26}$
licensee
string
required

The account that holds or will hold the license. It accepts what is signed on its hosted acceptance page.

Pattern: ^acct_[0-9a-hjkmnp-tv-z]{26}$
scope
object
required

The full terms the signer will see, with the current revision's values filled in.

terms_digest
string
required

The terms_digest the revision will carry if it is signed as drafted. Compare it with the signed revision's to see whether the signer changed anything.

Pattern: ^sha256:[0-9a-f]{64}$
signer
enum<string>
required

Who signs. talent: the talent, in the Talent Portal. representative: a person at your account with issue_licenses.

Available options:
talent,
representative
created_by
string
required

The representative account that prepared the draft.

Pattern: ^acct_[0-9a-hjkmnp-tv-z]{26}$
expires_at
string<date-time>
required

When the draft can no longer be signed. 30 days after it was created, unless you set an earlier time.

created_at
string<date-time>
required

When you created the draft.

license
string | null

The license this draft changes, or, once an issue draft is signed, the license it became.

Pattern: ^lic_[0-9a-hjkmnp-tv-z]{26}$
license_request
string | null

The license request this draft answers. null when it answers none.

Pattern: ^lrq_[0-9a-hjkmnp-tv-z]{26}$
signing_url
string<uri> | null

The Talent Portal page where the signer reads and signs the draft with a passkey. Present while open.

signed_as_drafted
boolean | null

Once signed, false when the signer changed terms before signing.

license_revision
string | null

The revision that signing created.

Pattern: ^lrv_[0-9a-hjkmnp-tv-z]{26}$
decision_note
string | null

The signer's note when they declined.

note
string | null

Shown to the licensee on the acceptance page. null when you sent none.

signed_at
string<date-time> | null

When the signer signed. null unless signed.

declined_at
string<date-time> | null

When the signer declined. null unless declined.

metadata
object

Keys and values of your own.