Skip to main content
Protocol reference. The current sandbox matches fictional talent by explicit ID or text. Standalone resolution, a downloadable name index and image or voice recognition remain planned. Start with the runnable quickstart and sandbox support matrix.
Resolution finds which talent a request invokes. Every check resolves its inputs, including when you name talent yourself. Resolution never clears anything: it says who is in a request, and the license decides what may be done.

How a request invokes a talent

Names, aliases, transliterations and credits come from Atlas. Reference media is matched against the face and voice of every talent with protection.references on. A description alone is not resolved, and outputs are checked only for the talent the check covered; see Generation checks.

Matching is inclusive

A check treats every candidate at medium confidence or higher as invoked, and its decision is the most restrictive across them. This produces false positives for common names: a prompt about a different person who shares a name with a protected talent is checked against that talent too. To remove the friction, narrow the check:
  • Pass talent with explicit IDs when your product already knows who the user means. A name in the inputs that a talent in talent carries counts as that talent, not as a match for someone else who shares it.
  • Pass exclude_talent with the IDs of talent your user confirmed they did not mean.
The alternative, matching only when certain, would let a misspelled or renamed prompt through, and that failure would land on the talent. Inclusive matching puts the cost on a confirmation step in your product instead.

No match is not permission

When no protected talent is found, a check returns allow with talent: []. That means only that the request names no one Reflections protects. It is not a license for any person the output shows. A resolution with status: "none" means the same thing.

Use kind

Resolution also classifies how the inputs use a talent, as use_kind: This keeps an assistant from refusing ordinary questions about public figures. It is a classification for routing, not a legal finding. The use.kind you send on a check must describe what your model will produce.

Resolving before the check

Checks resolve automatically, so most platforms never call resolution directly. Call POST /v1/resolutions when your own interface needs the candidates, for example to ask “did you mean Maya Okafor?” before you check. A resolution’s status is matched, ambiguous (more than one candidate, or one weak candidate) or none. Each candidate carries matched_by, confidence, the span of input text that matched, whether the licensee holds an active license for that talent (licensed), and the talent’s declaration for the use.

The name index

If you do not want to send every prompt, download the signed name index and match names on your side. It holds every protected talent’s names, aliases and transliterations, normalized with nfkc_casefold. Normalize prompt text the same way before you match. An entry with common: true is a name common enough that a match alone is weak evidence. Verify the index’s signature against the JWKS before you use it, refresh it at least hourly with If-None-Match, and stop matching against it after expires_at. A local match tells you to send a check. No local match does not clear a prompt: indirect references and reference media need the server. See Privacy for the prompt modes that pair with local matching.

Example: a podcast intro

The app shows “Maya Okafor” as the voice, then sends the check with talent: ["tal_9t0wxyhk5zba2q8v1m3n7p4r6s"] and the voice facet in facet, so the check skips resolution and decides against her voice license.

Atlas

The names and credits resolution matches against.

Resolving talent

Explicit IDs, autocomplete, disambiguation and the name index.

Several talent

The most restrictive rule across talent.

Resolve talent

The endpoint reference.