Skip to main content
Protocol reference. The current sandbox matches fictional fixtures by explicit ID or text. Standalone resolution, the name index and image or voice recognition described below are not available. Start with the runnable quickstart and sandbox support matrix.
Every check has to know which talent a request invokes. You can name them yourself, let the check find them in the inputs, or match prompts on your side first and send only the ones that hit. This page covers all three, and the mistakes that let an unlicensed use through.

Choose how to name talent

A description is not matched, and outputs are checked only for the talent their check covered. See Generation checks.

Name talent explicitly

When your user picks a person from a list, send their ID. The check reports them with matched_by: "explicit" and confidence: "exact", and still resolves the inputs for anyone else. To build the list, search talent by name and keep only those the licensee holds a license for:
When a platform acts for a licensee such as Ridgeline, add Reflections-Account: acct_2q8v1m3n7p4r6s9t0wxyhk5zba so licensed=true filters by Ridgeline’s licenses. Pass the chosen ID in the check’s talent, and the facet in facet when the talent has more than one of a type. An explicit ID covers who your user picked. It does not cover anyone else the prompt names. If the prompt also says “with Iris Calder”, the check still finds her and decides for both. See Multi-talent requests.

Let the check resolve the inputs

Omit talent and send the request as your model receives it. The check matches names, aliases, indirect references and reference media, and lists each talent it found in talent[]. Every candidate at medium confidence or higher is treated as invoked. Read matched_by and confidence to see why a talent is there. This is the default for free-text products. You do not need to call anything before the check.

Ask “did you mean”

Call POST /v1/resolutions only when your own interface needs candidates, such as autocomplete or a confirmation prompt. A resolution never decides anything. A restricted key needs the talent:read scope to create one, not checks:write; the same scope covers listing talent and downloading the name index. See Restricted keys.
A surname alone is a weak match, so the resolution is ambiguous:
Use span to highlight the matched words. Then send the check with the user’s answer: use_kind classifies how the inputs use the person. reference (talking about a person, with no synthesis) needs no license; the LLM assistants guide shows how to route it. It is a classification for routing, not a legal finding.

Match locally with the name index

If you do not want to send every prompt to Reflections, download the signed name index and match on your side. A local hit means “send a check”. No hit means only that no name matched.
1

Verify the signature

signature is a detached JWS over the tlp-json-1 canonical form of entries. Verify it against the keys at https://app.reflections.ai/.well-known/jwks.json before you use the index.
2

Normalize the prompt the same way

Apply Unicode NFKC normalization and case folding (nfkc_casefold) to every text input, then look for each entry’s names on word boundaries.
3

Send a check on any hit

A hit on an entry with common: true is weak evidence, but it still needs a check. You can omit talent and let the check resolve the full request.
4

Keep it current

Refresh at least hourly with If-None-Match, and at once when you receive talent.updated. Never match against an index past its expires_at.
The index holds names only. Send a check for every request with a reference or voice_sample input, whatever the local match says. Indirect references (“the runner from Ridgeline’s spring campaign”) are not in the index, and only a check resolves them, so a request you skip goes unresolved.

What can go wrong

Send exclude_talent only for a person your user confirmed they did not mean. It is not a way to remove a talent the prompt names on purpose.

Resolution

How a prompt is matched to talent, and why no match is not permission.

Atlas

The confirmed names, aliases and credits behind indirect references.

Multi-talent requests

Several talent in one request, and the most restrictive decision.

Resolve talent

The endpoint reference.