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

# Schemas

> Shared data schemas for the Relay API.

## Claim payload

When `encryptionKeyPem` is `null`, `claimPayload` is a JSON string. Once parsed (`JSON.parse(claimPayload)`), it has the following shape:

**`ClaimPayload`**

| Field          | Type                       | Description                                         |
| -------------- | -------------------------- | --------------------------------------------------- |
| `claim_type`   | `string`                   | The claim type that was evaluated                   |
| `claim_result` | `'passed' \| 'failed'`     | The outcome of the claim                            |
| `methodology`  | `MethodologyCalculation[]` | Omitted if the claim config sets `hide_methodology` |

**`MethodologyCalculation`**

| Field    | Type                                                            | Description                  |
| -------- | --------------------------------------------------------------- | ---------------------------- |
| `method` | `'facial_age_estimation' \| 'document_selfie' \| 'live_selfie'` | The verification method used |
| `result` | `'passed' \| 'failed'`                                          | The outcome of this method   |

## Claim types

To obtain the Claim Type ID needed to create a Relay session, navigate to Persona Dashboard → Relay. Additional details, including supported use cases, verification approaches, and implementation guidance for each claim type, are also available in the Dashboard.

### Humanness

| Claim type name         | Description                                                                                |
| ----------------------- | ------------------------------------------------------------------------------------------ |
| Live Human Presence     | Evaluates whether a real person is present at the time of verification.                    |
| Verified Human Presence | Evaluates whether a real person is present using a higher-assurance verification approach. |

### Age

| Claim type name        | Description                                                                                                          |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Age 18+ Germany        | Evaluates whether a user meets an 18+ age threshold using an approach designed for Germany-related use cases.        |
| Age 18+ United Kingdom | Evaluates whether a user meets an 18+ age threshold using an approach designed for United Kingdom-related use cases. |
| Age 18+ France         | Evaluates whether a user meets an 18+ age threshold using an approach designed for France-related use cases.         |
| Age 18+ Italy          | Evaluates whether a user meets an 18+ age threshold using an approach designed for Italy-related use cases.          |
| Age 18+ Australia      | Evaluates whether a user meets an 18+ age threshold using an approach designed for Australia-related use cases.      |
| Age 16+ Australia      | Evaluates whether a user meets a 16+ age threshold using an approach designed for Australia-related use cases.       |
| Age 18+ Brazil         | Evaluates whether a user meets an 18+ age threshold using an approach designed for Brazil-related use cases.         |
| Age 18+ Verified       | Evaluates whether a user meets an 18+ age threshold using a high-assurance age verification approach.                |
| Age 21+ Verified       | Evaluates whether a user meets a 21+ age threshold using a high-assurance age verification approach.                 |

## Error responses

All Relay API endpoints return errors in the following shape:

```json
{
  "errors": [
    {
      "status": "401",
      "title": "Unauthorized",
      "detail": "..."
    }
  ]
}
```

| Status                  | Description                                                         |
| ----------------------- | ------------------------------------------------------------------- |
| `400`                   | Bad request — missing or invalid parameters                         |
| `401`                   | Unauthorized — invalid or missing API key or relay secret           |
| `403`                   | Forbidden — relay secret does not match, or claim not yet available |
| `404`                   | Not found — relay token does not exist                              |
| `429`                   | Rate limited                                                        |
| `500 / 502 / 503 / 504` | Server error                                                        |