What this family does
A subject is how a developer gives every one of their own end users a separate cognition layer. You choose the id, Exo provisions the partition, and from then on any subject-aware call can act as that person by sending one header. Provisioning is the privileged act. Creating or erasing a subject needssubjects:provision, which an admin key also grants. Acting as a subject afterwards needs no extra scope, because an ordinary read or write key in the organization has always been able to route to a provisioned partition.
Routes
The shape of a call
Provision a subject and act as them.Traps
Subject selection is a header, not a body field. SendX-Exo-Subject: customer_6412. Some routes also accept a top-level subject field on a JSON body, but the header is the documented selector and it works on every subject-aware route including GETs.
subjectDefault from GET /v1/me is not a selector. It is the key owner’s internal user id, which is what a request acts as when no selector is sent. Internal ids never leave the API as selectors.
An unprovisioned selector is 403, not 404. subject_not_provisioned is the answer. Provision first with PUT /v1/subjects/{subject_id}.
A sandbox key cannot select another subject. exo_sandbox_ keys are contained in their own partition and get 403 permission_denied if they try to select out of it.
Related
API reference
Base URL, authentication, and the conventions every route shares.
Errors
The problem envelope and the full code catalogue.