> 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.

# Getting Started

> Understand Relay's two integration components and choose the methods that fit your stack.

A Relay integration requires two components: a client-side integration that runs the user-facing verification and a server-side integration that creates the Relay session and retrieves the claim result. Together, these components support Relay's Privacy Pass flow, which cryptographically separates verification from claim redemption.

Choose the client-side and server-side methods that best fit your product experience and technology stack. Relay supports web, iOS, Android, and multiple backend environments. If you need another platform or integration method, [contact support](https://app.withpersona.com/dashboard/contact-us) or talk to your Persona team.

#### How client-side and server-side integrations work together

### 1. Create a Relay session

Your server creates a Relay session, stores the Relay token and Relay secret, and returns the Relay session access token to the client.

![Your server creates a Relay session and returns the Relay session access token to the client.](https://assets.withpersona.com/f_auto,q_auto/developer-docs/images/relay-integration-overview-phase1.png)

### 2. Run the user-facing verification

The client uses the Relay session access token to start the verification through the Embedded Widget, Hosted Flow, iOS SDK, or Android SDK.

![The client uses the Relay session access token to run the user-facing verification.](https://assets.withpersona.com/f_auto,q_auto/developer-docs/images/relay-integration-overview-phase2.png)

### 3. Retrieve the claim result

Your server uses its selected server-side integration to generate and retrieve the claim result.

Begin claim retrieval when your client-side integration indicates that the user-facing flow is complete:

* **[Embedded Widget](/relay-widget-usage):** Call your server from `onComplete`.
* **[Hosted Flow](/relay-hosted-flow):** Begin polling your backend when the user launches Hosted Flow.
* **[iOS SDK](/relay-ios-sdk) and [Android SDK](/relay-android-sdk):** Call your server after the platform's normal Inquiry completion mechanism reports that the user-facing experience ended.

![Your server uses its stored credentials to retrieve the Relay claim result.](https://assets.withpersona.com/f_auto,q_auto/developer-docs/images/relay-integration-overview-phase3.png)

## Client-side integration methods

| Method                                 | Best for                                                                                             |
| -------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| [Embedded Widget](/relay-widget-usage) | Websites that want Relay rendered directly inside their page                                         |
| [Hosted Flow](/relay-hosted-flow)      | Websites that want to send users to a Persona-hosted Relay page with minimal client-side integration |
| [iOS SDK](/relay-ios-sdk)              | Native iOS apps that run Relay with the Persona iOS SDK                                              |
| [Android SDK](/relay-android-sdk)      | Native Android apps that run Relay with the Persona Android SDK                                      |

## Server-side integration methods

Use the same server-side method to create the Relay session, manage the Privacy Pass, and retrieve the claim result.

| Method                                                    | Best for                                                                                        |
| --------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| [Server SDK](/relay-sdk-quickstart)                       | Node.js or Go backends that want the SDK to handle Privacy Pass cryptography and retries        |
| [Edge Worker](/relay-edge-worker-deploying)               | Teams that want to deploy the Gateway Service interface to Cloudflare or Vercel                 |
| [Relay Gateway Service](/relay-gateway-service-deploying) | Backends that want a self-hosted HTTP service to handle Privacy Pass cryptography               |
| [API](/relay-api-usage)                                   | Teams that want direct API control and can implement the Privacy Pass protocol in their runtime |

## Test before you go live

To test a Relay integration, use [sandbox mode](/relay-sandbox). You can exercise the full flow — session, verification, Privacy Pass, and claim result — without running real verifications or incurring usage charges.

## See the whole flow before you build