> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reflections.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> The OpenAPI document at /api-reference/openapi.yaml defines the target contract. Its x-reflections-availability field and each operation's availability notice identify supported test and live forms. Do not infer implementation from a schema or code sample. Live keys support account details, reads of the licenses the calling account holds as licensee or issued as talent (GET /v1/licenses?role=issuer), and GET /v1/generations?license=… for the state of outputs under such a license (summaries only: no prompt, reference, bytes or metadata). Live image checks, submissions and receipts are built but not activated: until activation, a live POST /v1/checks or /v1/generations returns 403 live_not_activated, which must not be retried. Discovery and JWKS are at the origin root (https://app.reflections.ai/.well-known/...), not under /v1.
> Three rules hold everywhere: a decision is never an error (deny and escalate are 200 responses, and a live check still evaluating is a 202 with status checking); generate nothing for a named talent without an allow; deliver nothing until the generation is allow.
> The sandbox accepts personal rk_test_ keys. Persist a separate Idempotency-Key and body for each logical /v1 POST; retry an unknown outcome with the same key and body. OAuth and Talent API MCP remain planned.

# What we enforce

> Which license terms Reflections checks, which it only records, what it observes, what it records as stated, and where checking stops.

<Note>
  Production protocol reference. The sandbox uses deterministic fixture rules and test markers.
  Inline bytes are digest-checked, not evaluated for identity or license-term compliance. Test
  receipts are not proof of production enforcement or permission to use a real person.
  Start with the [runnable quickstart](/quickstart) and [sandbox support matrix](/sandbox).
</Note>

This page states what a decision from Reflections proves and what it does not. Two rules hold
across the API:

1. Every license term is either `checked` or `recorded`.
2. Every receipt states its `assurance`: `observed` or `attested`. Reflections never claims to have
   inspected bytes or prompts it did not receive.

## Checked and recorded terms

| Class | Meaning |
| - | - |
| `checked` | Reflections enforces the term at a check, a generation or a session sample. A use outside it is denied or escalated. |
| `recorded` | The term is signed, shown to both sides and kept on the record. Reflections does not enforce it, and a use can break it and still be allowed. |

Each license revision lists every term with its class in `enforcement`, and the `stage` where each
checked term is enforced. That list is the answer for that license. The table below is how terms
are usually classed.

| Signed term | Class | Stage | Checked against |
| - | - | - | - |
| `startsAt`, `endsAt` | `checked` | Check, generation, session | The time of the decision |
| Facets, modalities, kinds, purposes, commercial use | `checked` | Check, session | The `use` you declare |
| `channels`, `territories` | `checked` | Check | The `use` you declare |
| Platforms | `checked` | Check | The calling platform |
| `adjustments`, `prohibitedChanges` | `checked` | Check, generation | The request, then the output bytes |
| `requiredAttributes` | `checked` | Generation, session | The output bytes and samples |
| `neverExtras`, `alwaysExtras`, `creationBrief`, `voiceLineGrant` rules | `checked` | Check, generation, session | The request, the output bytes and samples |
| `releasePolicy` | `checked` | Generation | Each output is held until a reviewer releases it |
| `finalDeliverables`, monthly limits | `checked` | Check, generation | Counts Reflections keeps itself |
| Material access | `checked` | Material download | The license, on every download |
| Disclosure, attribution, training | `recorded` | | Delivered to you as obligations; Reflections cannot see whether you meet them |
| `isExclusive` | `recorded` | | |
| `conflicts` | `recorded` | | |
| Compensation | `recorded` | | Statements are computed from it; nothing is charged |

<Note>
  `channels`, `territories`, purpose and commercial use are checked against the `use` you send.
  Reflections does not see where you publish an output. If you declare `social` and place the output
  on TV, the check cannot stop it. The receipt's `permitted_use` records the use you declared, so
  anyone downstream can compare it with where the output appears.
</Note>

## Observed and attested

| Observed: Reflections read it itself | Attested: Reflections records what you state |
| - | - |
| Text and media inputs you send to a check | `execution`: the provider, model and job ID |
| Output bytes you submit as an `artifact` | `end_user.id` |
| Audio windows, transcripts and frames you submit as session samples | Text you send `withheld`, known only by its digest |
| Files, manifests and receipts sent for verification | Watermarks you register on a generation |
| Outputs, seconds and characters in the generations it decided | Placements and impressions you report as usage |
| | Revocation acknowledgements |
| | Payments you record, until the talent's side confirms them |

A generation receipt is `observed`: Reflections checked the bytes. A check receipt is `attested`
when Reflections recorded what you stated, such as text you sent `withheld`.

## Where checking stops

* A check decides on the request you send. Send the request your model receives, including your
  system text, rewritten prompt and references. See [Binding the request](/build/binding-the-request).
* A prompt that describes a person without naming or crediting them is not resolved, and outputs
  are checked only for the talent their check covered. Reflections does not screen outputs for
  talent nobody named. A talent who finds such an output can [verify it](/build/verifying-content);
  a verified receipt names the license it was made under.
* A rule the talent wrote that cannot be read at the generation is delivered and listed in
  `unchecked_terms`. A protected attribute, such as `identity.samePerson`, that cannot be confirmed
  is never delivered.
* In a live session, up to 15 seconds of generated speech passes unchecked between samples. A platform that
  misses `session.terminated` can keep a session running until its token expires, at most 5
  minutes.
* A tool that verifies an authorization offline cannot learn of a revocation before the token
  expires, at most 15 minutes after it was issued.
* `allow` with `talent: []`, a resolution with `status: "none"`, and a verification with
  `result: "not_found"` each mean only that no protected talent or receipt was found. None of them
  says content is licensed.
* `talent.verification` proves that a real adult controls the account and signed its licenses. It
  does not prove who owns every right in the name.
* Reflections does not move money and cannot guarantee that a statement is paid.

## What you can rely on

* Every decision names the license revision and the `terms_digest` it relied on, and you can
  recompute the digest from the signed terms.
* Every receipt is signed by Reflections and verifies offline against
  `https://app.reflections.ai/.well-known/jwks.json`.
* A use the talent declared `prohibited` is never allowed, and no license can change that.
* No endpoint can sign, accept or widen a license. Only a person's signature on the talent's side makes one.

## Example: Ridgeline's license K7Q4M2

```json theme={null}
{
  "enforcement": [
    { "term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.channels", "enforcement": "checked", "stage": ["check"] },
    { "term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.territories", "enforcement": "checked", "stage": ["check"] },
    { "term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.requiredAttributes", "enforcement": "checked", "stage": ["generation"] },
    { "term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.neverExtras", "enforcement": "checked", "stage": ["check", "generation"] },
    { "term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.releasePolicy", "enforcement": "checked", "stage": ["generation"] },
    { "term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.isExclusive", "enforcement": "recorded" },
    { "term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.conflicts", "enforcement": "recorded" }
  ]
}
```

Reflections denies a check that declares TV, denies an image that changes Maya Okafor's build or
shows alcohol, and holds every output for her release. It does not stop Ridgeline from placing a
released image next to a brand that `conflicts` names: that term is Ridgeline's promise, signed and
on the record.

## Related

<Columns cols={2}>
  <Card title="Licenses" icon="file-signature" href="/concepts/licenses">
    Terms, scope and the `enforcement` list.
  </Card>

  <Card title="Generation checks" icon="image" href="/concepts/generation-checks">
    What is checked on the bytes.
  </Card>

  <Card title="Provenance" icon="receipt" href="/concepts/provenance">
    Receipts and their assurance.
  </Card>

  <Card title="Failure modes" icon="triangle-exclamation" href="/concepts/failure-modes">
    What happens when a check cannot finish.
  </Card>
</Columns>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.