Scopes available

Complete reference for ZYKAY verification scopes.

What is a scope?

A scope defines what identity information you want to verify. Scopes are specified via the widget's data-scopes attribute and determine the attributes returned in the Exchange API response.

<script src="https://widget-app.zykay.com/v4/loader.min.js"
        data-partner-id="pk_live_xxx"
        data-success-path="/verified"
        data-scopes="isAdult,isFrench,isUnique"></script>

Scope table

ScopeKindDescriptionReturned attribute
isAdultBinaryAt 18 years or olderage_over_18: true
isFrenchBinaryFrench nationalityis_french: true
isEUBinaryCitizen of the European Unionis_eu: true
isUniqueNullifyUnique identifier per applicationnullifier: "0x..."

Binary scopes

Binary scopes return true or false. These are the most common:

  • isAdult — verifies that the user is 18 years or older. Default scope if data-scopes is not specified.
  • isFrench — verifies that the nationality is French (ISO 250 code).
  • isEU — verifies that the nationality is that of one of the 27 Member States of the European Union.

Scope isUnique (Sybil resistance)

The isUnique scope generates a cryptographic identifier (nullifier) which is:

  • Unique per application: two different partner sites produce different nullifiers for the same user
  • Unique per user: two different users produce different nullifiers
  • Deterministic: the same user on the same site always produces the same nullifier

This allows duplicates (Sybil attacks) to be detected without revealing the user's identity.

The isUnique scope requires an app_id which is automatically derived from your Partner ID. No additional configuration is required.

Examples of combinations

<!-- Age verification only (default scope) -->
data-scopes="isAdult"
 
<!-- Age + French nationality -->
data-scopes="isAdult,isFrench"
 
<!-- Age + nationality + Sybil resistance (recommended) -->
data-scopes="isAdult,isFrench,isUnique"
 
<!-- EU citizen + Sybil resistance -->
data-scopes="isEU,isUnique"

API response according to scopes

Example responses POST /v1/exchange for different scope combinations:

{
  "pass_token": "p_xyz789abc123...",
  "expires_in": 14400,
  "token_type": "Bearer",
  "age_over_18": true,
  "scopes": ["isAdult"],
  "attributes": {
    "age_over_18": true
  }
}

Next steps