> ## 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.

# ODRL 2.2

> An ODRL 2.2 rendering of a TLP license revision, and the mapping from TLP scope fields to ODRL actions, constraints and duties.

This page specifies how a license revision's scope is rendered as an ODRL 2.2 policy in JSON-LD,
the TLP profile terms the rendering uses, and what the rendering does and does not mean.

## Status of a rendering

**TLP-ODRL-1.** A license server MAY publish an ODRL rendering of a license revision. A rendering
MUST be generated from the revision's scope, MUST carry the revision's object IRI as its `uid` and
its `terms_digest` as `tlp:termsDigest`, and MUST mark every duty that renders a recorded term with
`"tlp:enforcement": "recorded"`. When a rendering and the signed terms disagree, the signed terms
govern.

**TLP-ODRL-2.** A party MUST NOT treat the result of evaluating an ODRL rendering as a TLP decision.
Whether a use may proceed is decided only by a check
([Decision semantics](/standard/decision-semantics)).

## The TLP profile

A rendering declares the profile `https://docs.reflections.ai/standard/interop/odrl` and uses the
prefix `tlp:` for `https://docs.reflections.ai/standard/interop/odrl#`. The profile adds these
terms to the [ODRL 2.2 vocabulary](https://www.w3.org/TR/odrl-model/):

| Term | Kind | Values |
| - | - | - |
| `tlp:modality` | Left operand | `tlp:modality_` followed by a modality, such as `tlp:modality_image` |
| `tlp:kind` | Left operand | `tlp:kind_` followed by a use kind, such as `tlp:kind_depiction` |
| `tlp:commercial` | Left operand | `true` or `false` |
| `tlp:adjustment` | Left operand | `tlp:adjustment_` followed by an adjustment kind, such as `tlp:adjustment_hair` |
| `tlp:disclosureLevel` | Left operand | `tlp:disclosure_licensed`, `tlp:disclosure_brand`, `tlp:disclosure_scope` |
| `tlp:disclose` | Action | Label the output with `tlp:text` |
| `tlp:train` | Action | Train or fine-tune a model on the target |
| `tlp:submitOutput`, `tlp:embedReceipt`, `tlp:instructModel` | Action | Meet `generation_check`, `c2pa_manifest`, `generation_instructions` |
| `tlp:termsDigest`, `tlp:license`, `tlp:text`, `tlp:enforcement` | Property | Strings |

Purposes and channels are named the same way, as `tlp:purpose_advertising` and `tlp:channel_social`.
Each IRI names one field's value, so `audio` the modality and `audio` the channel stay distinct.

## Example (informative)

Ridgeline's license `K7Q4M2` from Maya Okafor: image depiction of her studio likeness for
advertising, on social media and the web, in the United States and Canada, from 1 October 2026 to
31 March 2027. Reframing, background extension, lighting, text overlay and objects are allowed; the
other seven adjustments are not. Outputs carry a brand disclosure, and training is prohibited.

```json theme={null}
{
  "@context": [
    "http://www.w3.org/ns/odrl.jsonld",
    {
      "tlp": "https://docs.reflections.ai/standard/interop/odrl#",
      "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
      "xsd": "http://www.w3.org/2001/XMLSchema#"
    }
  ],
  "@type": "Agreement",
  "uid": "https://app.reflections.ai/lrv_p4r6s9t0wxyhk5zba2q8v1m3n7",
  "profile": "https://docs.reflections.ai/standard/interop/odrl",
  "tlp:license": "https://app.reflections.ai/lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
  "tlp:termsDigest": "sha256:39f18c8bef02b5226b9feaa92e526ed30b81b91650d8a10b503281b169f44431",
  "assigner": "https://app.reflections.ai/tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
  "assignee": "https://app.reflections.ai/acct_2q8v1m3n7p4r6s9t0wxyhk5zba",
  "permission": [
    {
      "target": "https://app.reflections.ai/fct_5zba2q8v1m3n7p4r6s9t0wxyhk",
      "action": "derive",
      "constraint": [
        { "leftOperand": "tlp:modality", "operator": "eq", "rightOperand": { "@id": "tlp:modality_image" } },
        { "leftOperand": "tlp:kind", "operator": "eq", "rightOperand": { "@id": "tlp:kind_depiction" } },
        { "leftOperand": "purpose", "operator": "eq", "rightOperand": { "@id": "tlp:purpose_advertising" } },
        { "leftOperand": "tlp:commercial", "operator": "eq", "rightOperand": true },
        {
          "leftOperand": "deliveryChannel",
          "operator": "isAnyOf",
          "rightOperand": [{ "@id": "tlp:channel_social" }, { "@id": "tlp:channel_web" }]
        },
        { "leftOperand": "spatial", "operator": "isAnyOf", "rightOperand": ["US", "CA"] },
        {
          "leftOperand": "dateTime",
          "operator": "gteq",
          "rightOperand": { "@value": "2026-10-01T00:00:00Z", "@type": "xsd:dateTime" }
        },
        {
          "leftOperand": "dateTime",
          "operator": "lt",
          "rightOperand": { "@value": "2027-04-01T00:00:00Z", "@type": "xsd:dateTime" }
        }
      ],
      "duty": [
        {
          "action": [
            {
              "rdf:value": { "@id": "tlp:disclose" },
              "refinement": [
                { "leftOperand": "tlp:disclosureLevel", "operator": "eq", "rightOperand": { "@id": "tlp:disclosure_brand" } }
              ]
            }
          ],
          "tlp:text": "Made with AI. Maya Okafor's likeness used under license by Ridgeline."
        }
      ]
    }
  ],
  "prohibition": [
    {
      "target": "https://app.reflections.ai/fct_5zba2q8v1m3n7p4r6s9t0wxyhk",
      "action": [
        {
          "rdf:value": { "@id": "odrl:modify" },
          "refinement": [
            {
              "leftOperand": "tlp:adjustment",
              "operator": "isAnyOf",
              "rightOperand": [
                { "@id": "tlp:adjustment_body_and_age" },
                { "@id": "tlp:adjustment_expression" },
                { "@id": "tlp:adjustment_hair" },
                { "@id": "tlp:adjustment_pose" },
                { "@id": "tlp:adjustment_wardrobe" },
                { "@id": "tlp:adjustment_skin_retouch" },
                { "@id": "tlp:adjustment_endorsement" }
              ]
            }
          ]
        }
      ]
    },
    {
      "target": "https://app.reflections.ai/fct_5zba2q8v1m3n7p4r6s9t0wxyhk",
      "action": "tlp:train"
    }
  ]
}
```

## Mapping

**TLP-ODRL-3.** A rendering MUST map each scope field it renders as this table specifies, and MUST
leave out fields the table marks as not rendered.

| TLP scope field | ODRL |
| - | - |
| The license's talent | `assigner` |
| The license's licensee | `assignee` |
| The revision ID, and `terms_digest` | Policy `uid`, and `tlp:termsDigest` |
| `facets` | `target` of each rule |
| `modalities` | Constraint `tlp:modality`, `eq` or `isAnyOf` |
| `kinds` | Constraint `tlp:kind`. The permitted action is `derive`: the output is a new asset derived from the facet. |
| `purposes` | Constraint `purpose` |
| `commercial` | Constraint `tlp:commercial`, `eq` |
| `channels` | Constraint `deliveryChannel`, `isAnyOf` |
| `territories` | Constraint `spatial`, `isAnyOf`, with ISO 3166-1 alpha-2 codes. `WW` is rendered as no spatial constraint. |
| `window` | Constraints `dateTime`, `gteq` the start and `lt` the end |
| `adjustments` set to `false`, and `prohibited_changes` | Prohibition of `modify`, refined by `tlp:adjustment` |
| `final_deliverables` | Constraint `count`, `lteq`, on the permission |
| `platforms` with mode `listed` | Constraint `systemDevice`, `isAnyOf` the platforms' object IRIs |
| `sublicense` set to `end_users_personal` | Permission `grantUse`, constrained to `purpose` `tlp:purpose_personal` and `tlp:commercial` `false` |
| `material_access` | Permission `reproduce` on each listed facet |
| `training` set to `prohibited` | Prohibition of `tlp:train` |
| `release_policy` set to `per_output_review` | Duty `obtainConsent` |
| `disclosure` | Duty `tlp:disclose`, refined by `tlp:disclosureLevel` |
| `attribution` | Duty `attribute`, with `tlp:text` |
| `compensation` | Duty `compensate`, refined by `payAmount` with its `unit` |
| `exclusivity` | Duty `ensureExclusivity`, marked `"tlp:enforcement": "recorded"` |
| `required_attributes`, `rules`, `monthly_limits`, `sessions`, `escalation_window`, `conflicts`, `post_revocation` | Not rendered. ODRL has no counterpart; the license server applies them. |

Obligations that a decision carries map to duties in the same way:

| Obligation | ODRL duty |
| - | - |
| `generation_check` | `tlp:submitOutput` |
| `hold_until_release` | `obtainConsent` |
| `draft_watermark` | `watermark` |
| `generation_instructions` | `tlp:instructModel` |
| `disclosure` | `tlp:disclose` |
| `attribution` | `attribute` |
| `c2pa_manifest` | `tlp:embedReceipt` |
| `no_training` | Prohibition of `tlp:train` |
| `delete_material` | `delete` |
| `usage_report` | `inform` |

## Related

<Columns cols={2}>
  <Card title="Use vocabulary" icon="tags" href="/standard/use-vocabulary">
    The TLP values the profile's IRIs name.
  </Card>

  <Card title="Licenses" icon="book" href="/concepts/licenses">
    License revisions, scope and signed terms.
  </Card>
</Columns>


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