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.
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 withmatched_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:
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
Omittalent 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”
CallPOST /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.
ambiguous:
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.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.
Related
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.