> For the complete documentation index, see [llms.txt](https://docs.toomuchmedia.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.toomuchmedia.com/getting-started/integrations/age-verification/cms-age-verification.md).

# Age Verification for CMS Member Areas

*Article Topics:* [*Age Verification*](/getting-started/common-topics/age-verification.md)*,* [*Member Area*](/getting-started/common-topics/member-area.md)

## Overview

CMS Member Areas can require a member to pass an Age Verification (AVS) check when they log in, separate from any Age Verification you may (or may not) run on the join/signup form. This is most often used by clients who don't run AVS at signup but still need to verify a member's age before letting them view content, or who want to re-verify members after a certain period of time.

Two options are available for CMS login-time Age Verification:

* **Yoti** – NATS's built-in Yoti integration, extended to run at Member Area login instead of (or in addition to) signup.
* **Custom AVS** – Redirects the member to an AVS provider of your own choosing, then accepts a callback to NATS's API to mark the member verified.

Both options are configured on the Member Area's **Server Setup** tab (**Content Management > Member Areas & Tours >** select your Member Area **> Server Setup**), and both reuse the country/state lists from the **Age Verification** section of [Configuration Admin > Surfer](/nats-admin/configuration/configuration-overview/surfer.md#age-verification) to decide which visitors need to be verified.

{% hint style="danger" %}
**Important:** Do **not** turn on the **Age Verification** setting itself in Configuration Admin > Surfer > Age Verification. That setting enables Age Verification on the **member signup/join form** — it is unrelated to CMS login-time verification. CMS Age Verification only needs the **List Countries Age Verify** / **List State Age Verify** lists (and related settings like **Verify Unlocated Users**) from that same section, not the **Age Verification** toggle.

Turning it on in addition to setting up CMS Age Verification will also require Age Verification at signup, which is likely not what you want.
{% endhint %}

## Yoti

If you haven't already, follow the [Yoti](/getting-started/integrations/age-verification/yoti.md) article to create a Yoti account and configure your API Key, Client SDK ID, and verification preferences in Configuration Admin > Surfer > Age Verification.

To use Yoti for a CMS Member Area instead of (or in addition to) the join form:

1. Navigate to **Content Management > Member Areas & Tours**, select your Member Area, and open the **Server Setup** tab.
2. Set the **Age Verification** field to **Yoti Age Verification**.
3. On the [Login Form Block](/content-management/member-areas-and-tours/themes/block-types/login-form-block.md)'s **Settings** tab, configure:
   * **MA Landing Page on Age Verification** – the page within the Member Area a member lands on after passing verification.
   * **Tour Landing Page on Failed Age Verification** – the page within the Tour a member is sent to if verification fails.

A member who isn't yet verified and meets the country/state criteria from the Surfer Age Verification settings will be sent through Yoti before being allowed into the Member Area.

## Custom AVS

If you use your own AVS provider (or a hook-based custom AVS flow), NATS can redirect unverified members to your AVS endpoint on login and accept a callback once they're verified.

### 1. Configure the Custom AVS URL

On the Member Area's **Server Setup** tab, set the **Custom AVS URL** field to your AVS provider's endpoint, using the following template tokens:

{% code overflow="wrap" %}

```
https://yourcustomavs.com/avsendpoint?memberid=%%MEMBERID%%&block=%%CMS_BLOCK_ID%%[&any other parameters your AVS requires]
```

{% endcode %}

* `%%MEMBERID%%` is replaced with the member's ID.
* `%%CMS_BLOCK_ID%%` is replaced with the ID of the CMS block the member was trying to access.
* Append any additional query parameters your AVS provider requires.

When a member who is not flagged as age-verified tries to log in, NATS redirects them to this URL instead of granting access.

### 2. Verify the Member Back to NATS

Once your AVS provider has verified the member, it should call back to NATS's API to mark them as verified:

{% content-ref url="/pages/5fe9522c81260b356b0ae55d4c82740255f8dd56" %}
[/api/member/member\_age\_verification](/api/api-endpoints/member/api-member-member_age_verification.md)
{% endcontent-ref %}

At minimum, pass:

* `memberid` – the member being verified.
* `cms_block_id` – the block ID that was passed to your AVS endpoint.
* `verified` – set to mark the member as age-verified.

Once this call succeeds, the member is considered verified for that block and can be redirected back into the Member Area.

{% hint style="info" %}
**Please Note:** Custom AVS in this form — using the Custom AVS URL field, the `cms_block_id` token, and the country/state list settings above — is a CMS Member Area login feature. It does not apply outside the CMS.
{% endhint %}

## Custom AVS Without the CMS

If a site isn't using the CMS, you can still verify a member's age at any point after their `memberid` exists by calling [`PATCH /api/member/member_age_verification`](https://docs.toomuchmedia.com/api/api-endpoints/member/api-member-member_age_verification) directly, without a `cms_block_id`.

This path is different from the CMS flow above in two ways:

* The **Age Verification** setting in Configuration Admin > Surfer > Age Verification (the one you should leave off for CMS-only AVS) needs to be turned **on**, since NATS uses it to know Age Verification is required for that member.
* The **List Countries Age Verify** / **List State Age Verify** lists and the Custom AVS URL/`cms_block_id` behavior described above don't apply — there's no CMS block context, so it's entirely up to your own integration to decide when to call the endpoint and for whom.

## Related Articles

{% content-ref url="/pages/uTgYoBB1EMGDsTOaOyqC" %}
[Yoti](/getting-started/integrations/age-verification/yoti.md)
{% endcontent-ref %}

{% content-ref url="/pages/H1H6g5CqbVlkzaentCln" %}
[Surfer](/nats-admin/configuration/configuration-overview/surfer.md)
{% endcontent-ref %}

{% content-ref url="/pages/GzekTL0MZumlAOld1Qlx" %}
[Creating a Member's Area](/content-management/member-areas-and-tours/creating-a-members-area.md)
{% endcontent-ref %}
