1. Get a test key
Create an unrestricted test key in the dashboard. The escalation helper needs an unrestricted key. Keep it private and export it in your terminal:2. Check, submit and verify
Save this block asquickstart.sh, then run bash quickstart.sh from the same terminal. It stops
on an HTTP failure, malformed response, a check without allow, or a generation without allow.
It writes request bodies and one idempotency key per logical request to reflections-demo.
Rerun it with that directory unchanged after an unknown network outcome. For a new request, export
a new REFLECTIONS_DEMO_DIR; never change a body while reusing its key.
/files, multipart verification,
manifest verification and media evaluation by a real model are not supported. See Sandbox.
3. Verify the signature locally
Run this from your original directory. It checks the JWS against the published test JWKS, the pinned issuer, receipt identity, test key ID and original artifact digest. This is a test-mode example; do not use it to accept real talent content.{ "receipt": "rcpt_…" } or
{ "sha256": "<the original file's hex digest>" }; use a new persisted key for each new logical
verification. The sandbox does not fetch URLs or extract C2PA manifests.
4. Exercise the stop paths
Use the same check body with Iris Calder or Dev Marlow in place of Maya. Each returnsdeny. Add rfl_test_escalate to Maya’s prompt to get escalate. Save each changed body in a
new demo directory with new keys. The script stops before submission in all three cases. A 200
alone is never permission to proceed.
A deny response (Iris Calder)
A deny response (Iris Calder)
The request:The response:Branch on
reasons[].code. remedy tells the licensee what would change the answer.held with decision: "escalate".
The script stops after saving that generation. Resolve its escalation
and retrieve the generation again; continue only when it returns allow. For asynchronous test
outputs, poll at most once every five seconds. Webhook delivery is not implemented in the sandbox.
Next
- Sandbox: supported operations, fixtures, stop paths and limits.
- API reference: native HTTP samples and per-operation availability.
- Production status: what remains before live generation.