> This page is for version 2026-09-29 (default).
> For other versions, use one of these documentation indexes:
> - 2026-09-29 (default): https://docs.withpersona.com/2026-09-29/llms.txt
> - 2025-12-08: https://docs.withpersona.com/2025-12-08/llms.txt
> - 2025-10-27: https://docs.withpersona.com/2025-10-27/llms.txt
> - 2023-01-05: https://docs.withpersona.com/2023-01-05/llms.txt
> - 2022-09-01: https://docs.withpersona.com/2022-09-01/llms.txt
> - 2021-07-05: https://docs.withpersona.com/2021-07-05/llms.txt
> - 2021-05-14: https://docs.withpersona.com/2021-05-14/llms.txt
> - 2020-05-18: https://docs.withpersona.com/2020-05-18/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.withpersona.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.withpersona.com/_mcp/server.

# Sandbox

> Test your Relay integration end to end without incurring usage charges.

Relay supports Persona's [sandbox environment](/environments#sandbox), so you can build and test a full integration — session creation, the user-facing verification, the Privacy Pass, and claim retrieval — without running real verifications or incurring usage charges.

> **Availability**
>
> Relay must be enabled for your sandbox environment, which depends on your
> Persona plan. If issuing a Privacy Pass returns a "Privacy Pass for Relay is
> not enabled" error, talk to your Persona team or [contact us](https://app.withpersona.com/dashboard/contact-us).

## What's different in sandbox

Sandbox behaves like production from your integration's point of view — the same endpoints, the same request and response shapes, the same Privacy Pass flow, the same payload shape and encryption. What changes is what happens underneath:

* **No real verification is performed.** Sandbox does not evaluate the end user — the claim result is simulated. See [Environments](/environments#sandbox).
* **No usage charges.** Sandbox activity is not billed.
* **A separate Privacy Pass scope.** A sandbox pass cannot be redeemed against a production relay, and a production pass cannot be redeemed against a sandbox relay.

## What a sandbox claim returns

> **Sandbox claims always pass**
>
> A sandbox relay returns `"claim_result": "passed"` for every claim type. The
> result is fixed — it does not depend on what the end user did, and it is
> returned even if the verification flow was never started or completed. Use
> sandbox to prove your integration is wired up correctly, not to test how your
> application handles a failing claim.

The payload is otherwise identical to production:

```json
{
  "claim_type": "live_human_presence",
  "claim_result": "passed",
  "methodology": [{ "method": "live_selfie", "result": "passed" }]
}
```

* `methodology` reports a single calculation: the primary method configured for that claim type. As in production, it is left out of the payload for claim types that hide methodology. See the **Methodology in payload** column under [Claim types](/relay-schemas#claim-types).
* If you supplied an `encryptionKeyPem`, the payload is still RSA-OAEP encrypted. Decrypt it the same way.
* Because the claim passes, a successful redemption returns `token-consumed: true` and the pass is spent. Errors leave the pass unspent, exactly as in production.

## Selecting the environment

Sandbox is opt-in on top of whichever server-side integration you already use. See the documentation for your [server-side integration method](/relay-getting-started#server-side-integration-methods) for the specifics:

* The **Server SDKs** infer the environment from your API key, so a sandbox key runs against sandbox with nothing further to configure.
* The **Relay Gateway Service** and the **API** take a `sandbox` field on relay creation.

### Client-side integrations

Nothing changes in the client-side integration. During the flow you can use Persona's [sandbox controls](/environments#sandbox) to move an end user through passing and failing paths, which is useful for exercising your own UI — though as above, the Relay claim itself returns `passed` either way.