Minting one
Minting needs the
admin scope. See POST /v1/sandbox/keys.
The containment rule
A sandbox key presentingX-Exo-Subject for anything but its own partition is refused with 403 permission_denied.
Without that rule “sandbox” would be a label rather than a boundary: one leaked test key could read, and once exports shipped, dump, every provisioned subject in the organization. The check asks the database rather than trusting the key prefix, so it holds even for a key minted through another route.
A sandbox key also cannot mint API keys, for the same reason.
Resetting it
Idempotency-Key returns the original counts rather than running the wipe again.
What reset does not clear
Reset removes rows it can attribute to the sandbox partition. Some derived structure has no attribution: domains the sandbox content helped form, segmentation rows, and clustered agent patterns are organization-wide aggregates, and deleting them would take a real user’s cognition with them. Those are left in place, deliberately. If you genuinely need a clean slate for the whole organization, that isPOST /v1/purge with scope: "org", which is a two-phase destructive ceremony rather than a test convenience.
Routes
All four require
admin.
One conflict to know about
__sandbox__ is a reserved subject id. If it was already provisioned as an ordinary subject, the sandbox cannot claim it without colliding with real data, and the routes refuse with 409 sandbox_subject_conflict rather than proceeding.
Next
Authentication
How keys are minted, presented and revoked.
Scopes
Why a sandbox key is capped at read and write.