> ## Documentation Index
> Fetch the complete documentation index at: https://docs.noresponse.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Search assessments across this environment

> Search retained assessments created in [from,to), over at most 366 days. Filters use each assessment decision, rather than the current account decision. Results can change between pages. Keep the assessment version to retrieve the exact decision later. This read does not require an idempotency key.



## OpenAPI

````yaml /openapi.json post /v1/assessments/search
openapi: 3.1.0
info:
  title: NoResponse API
  version: '1'
  description: >-
    The NoResponse API assesses an account creation, login or purchase and
    answers with the account's one current risk: a 0 to 100 score, a decision
    for the flow (`allow`, `step_up`, `review` or `block`), the reasons behind
    it and the decision for each flow. The assessment's own facts, such as its
    status, confidence and incomplete sources, sit under `detail`.


    Authenticate every request with your API key as `Authorization: Bearer
    nrk_...`. Call the API only from your backend.


    Guides, SDKs and webhook verification are at
    [docs.noresponse.org](https://docs.noresponse.org/). Every error is an RFC
    9457 problem document; see
    [Errors](https://docs.noresponse.org/reference/errors).
servers:
  - url: https://api.noresponse.org
    description: Production
security:
  - tenantBearer: []
tags:
  - name: assess
    x-displayName: Assessments
    x-group: Assessments
    description: Create, read and list assessments, and report outcomes.
  - name: accounts
    x-displayName: Accounts
    x-group: Accounts
    description: >-
      Each of your accounts holds one current risk, and its assessments are its
      history.
  - name: usage
    x-displayName: Key usage
    x-group: Key usage
    description: >-
      Report usage of the API keys that your account creation gate issued, so a
      shared or stolen key raises its account's risk.
  - name: keys
    x-displayName: API keys
    x-group: API keys
    description: >-
      Rotate your own API key and, with the `management` scope, create, list and
      revoke the keys of its environment.
  - name: settings
    x-displayName: Settings
    x-group: Settings
    description: >-
      Read and preview environment settings, run evaluations, and publish
      reviewed policy with separate permissions.
  - name: lists
    x-displayName: Lists
    x-group: Lists
    description: >-
      Preview, allow or block accounts that use an email or email domain.
      Publishing changes requires policy authority.
  - name: integrations
    x-displayName: Integrations
    x-group: Integrations
    description: >-
      Hosted endpoints that answer your WorkOS, Auth0 or Supabase sign-up and
      sign-in hooks.
  - name: webhooks
    x-displayName: Webhooks
    x-group: Webhooks
    description: Your webhook endpoints, and the signed events NoResponse sends to them.
  - name: workspaces
    x-displayName: Workspaces
    x-group: Workspaces
    description: >-
      Manage non-owner team access, read usage and audit events, configure audit
      streams, and export retained account or audit data.
  - name: requests
    x-displayName: Request diagnostics
    x-group: Request diagnostics
    description: Search retained request attempts and summarize their status and latency.
  - name: groups
    x-displayName: Groups
    x-group: Groups
    description: >-
      Screen a group's people: create the group, upload its list of people,
      start screenings and record a decision on each person.
  - name: reviews
    x-displayName: Reviews
    x-group: Reviews
    description: >-
      Investigate accounts with assignments, comments, linked evidence, saved
      filters and recorded resolutions.
paths:
  /v1/assessments/search:
    post:
      tags:
        - assess
      summary: Search assessments across this environment
      description: >-
        Search retained assessments created in [from,to), over at most 366 days.
        Filters use each assessment decision, rather than the current account
        decision. Results can change between pages. Keep the assessment version
        to retrieve the exact decision later. This read does not require an
        idempotency key.
      operationId: searchAssessments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssessmentSearchRequest'
      responses:
        '200':
          $ref: '#/components/responses/SearchAssessments200'
        '400':
          $ref: '#/components/responses/InvalidHistoryQuery'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/WorkspaceForbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - tenantBearer: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |
            curl --request POST \
              --url 'https://api.noresponse.org/v1/assessments/search' \
              --header "Authorization: Bearer $NORESPONSE_API_KEY" \
              --header 'Content-Type: application/json' \
              --data '{
              "from": "2026-10-01T00:00:00Z",
              "to": "2026-10-02T00:00:00Z",
              "limit": 20,
              "identifier_expression": {
                "scope": "assessment",
                "expression": {
                  "and": [
                    {
                      "term": {
                        "kind": "phone",
                        "value": "+14155552671",
                        "match": "canonical"
                      }
                    },
                    {
                      "or": [
                        {
                          "term": {
                            "kind": "email",
                            "value": "case@example.com",
                            "match": "exact"
                          }
                        },
                        {
                          "term": {
                            "kind": "email",
                            "value": "other@example.com",
                            "match": "exact"
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            }'
        - lang: typescript
          label: TypeScript
          source: |
            import { NoResponse } from "@noresponse/node";

            const noResponse = new NoResponse({
              apiKey: process.env["NORESPONSE_API_KEY"] ?? "",
            });

            async function run() {
              const result = await noResponse.assessments.search({
                from: "2026-10-01T00:00:00Z",
                to: "2026-10-02T00:00:00Z",
                identifierExpression: {
                  scope: "assessment",
                  expression: {
                    and: [
                      {
                        term: {
                          kind: "phone",
                          value: "+14155552671",
                          match: "canonical",
                        },
                      },
                      {
                        or: [
                          {
                            term: {
                              kind: "email",
                              value: "case@example.com",
                              match: "exact",
                            },
                          },
                          {
                            term: {
                              kind: "email",
                              value: "other@example.com",
                              match: "exact",
                            },
                          },
                        ],
                      },
                    ],
                  },
                },
              });

              console.log(result.total);
            }

            run();
        - lang: python
          label: Python
          source: |
            from noresponse import NoResponse
            import os


            with NoResponse(
                api_key=os.getenv("NORESPONSE_API_KEY", ""),
            ) as no_response:

                res = no_response.assessments.search(from_="2026-10-01T00:00:00Z", to="2026-10-02T00:00:00Z", identifier_expression={
                    "scope": "assessment",
                    "expression": {
                        "and_": [
                            {
                                "term": {
                                    "kind": "phone",
                                    "value": "+14155552671",
                                    "match": "canonical",
                                },
                            },
                            {
                                "or_": [
                                    {
                                        "term": {
                                            "kind": "email",
                                            "value": "case@example.com",
                                            "match": "exact",
                                        },
                                    },
                                    {
                                        "term": {
                                            "kind": "email",
                                            "value": "other@example.com",
                                            "match": "exact",
                                        },
                                    },
                                ],
                            },
                        ],
                    },
                }, limit=20)

                # Handle response
                print(res.total)
        - lang: go
          label: Go
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tnoresponse \"github.com/noresponsehq/go/v12\"\n\t\"github.com/noresponsehq/go/v12/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := noresponse.New(\n        noresponse.WithSecurity(os.Getenv(\"NORESPONSE_API_KEY\")),\n    )\n\n    res, err := s.Assessments.Search(ctx, components.AssessmentSearchRequest{\n        From: \"2026-10-01T00:00:00Z\",\n        To: \"2026-10-02T00:00:00Z\",\n        IdentifierExpression: &components.IdentifierExpression{\n            Scope: components.ScopeEnumAssessment,\n            Expression: components.IdentifierExpressionNode{\n                And: []components.IdentifierExpressionNodeLevelTwo{\n                    components.IdentifierExpressionNodeLevelTwo{\n                        Term: &components.IdentifierSearch{\n                            Kind: components.IdentifierSearchKindPhone,\n                            Value: \"+14155552671\",\n                            Match: components.MatchCanonical.ToPointer(),\n                        },\n                    },\n                    components.IdentifierExpressionNodeLevelTwo{\n                        Or: []components.IdentifierExpressionNodeLevelOne{\n                            components.IdentifierExpressionNodeLevelOne{\n                                Term: &components.IdentifierSearch{\n                                    Kind: components.IdentifierSearchKindEmail,\n                                    Value: \"case@example.com\",\n                                    Match: components.MatchExact.ToPointer(),\n                                },\n                            },\n                            components.IdentifierExpressionNodeLevelOne{\n                                Term: &components.IdentifierSearch{\n                                    Kind: components.IdentifierSearchKindEmail,\n                                    Value: \"other@example.com\",\n                                    Match: components.MatchExact.ToPointer(),\n                                },\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}\n"
        - lang: java
          label: Java
          source: >
            package hello.world;


            import java.lang.Exception;

            import java.util.List;

            import org.noresponse.NoResponse;

            import org.noresponse.models.errors.AuthenticationException;

            import org.noresponse.models.errors.BadRequestException;

            import org.noresponse.models.errors.ConflictException;

            import org.noresponse.models.errors.NotFoundException;

            import org.noresponse.models.errors.PermissionDeniedException;

            import org.noresponse.models.errors.RateLimitException;

            import org.noresponse.models.operations.SearchAssessmentsResponse;

            import org.noresponse.models.shared.AssessmentSearchRequest;

            import org.noresponse.models.shared.IdentifierExpression;

            import org.noresponse.models.shared.IdentifierExpressionNode;

            import
            org.noresponse.models.shared.IdentifierExpressionNodeLevelOne;

            import
            org.noresponse.models.shared.IdentifierExpressionNodeLevelTwo;

            import org.noresponse.models.shared.IdentifierSearch;

            import org.noresponse.models.shared.IdentifierSearchKind;

            import org.noresponse.models.shared.Match;

            import org.noresponse.models.shared.ScopeEnum;


            public class Application {

                public static void main(String[] args) throws Exception {

                    NoResponse sdk = NoResponse.builder()
                            .apiKey(System.getenv().getOrDefault("NORESPONSE_API_KEY", ""))
                        .build();

                    AssessmentSearchRequest req = AssessmentSearchRequest.builder()
                            .from("2026-10-01T00:00:00Z")
                            .to("2026-10-02T00:00:00Z")
                            .identifierExpression(IdentifierExpression.builder()
                                .scope(ScopeEnum.ASSESSMENT)
                                .expression(IdentifierExpressionNode.builder()
                                    .and(List.of(
                                        IdentifierExpressionNodeLevelTwo.builder()
                                            .term(IdentifierSearch.builder()
                                                .kind(IdentifierSearchKind.PHONE)
                                                .value("+14155552671")
                                                .match(Match.CANONICAL)
                                                .build())
                                            .build(),
                                        IdentifierExpressionNodeLevelTwo.builder()
                                            .or(List.of(
                                                IdentifierExpressionNodeLevelOne.builder()
                                                    .term(IdentifierSearch.builder()
                                                        .kind(IdentifierSearchKind.EMAIL)
                                                        .value("case@example.com")
                                                        .match(Match.EXACT)
                                                        .build())
                                                    .build(),
                                                IdentifierExpressionNodeLevelOne.builder()
                                                    .term(IdentifierSearch.builder()
                                                        .kind(IdentifierSearchKind.EMAIL)
                                                        .value("other@example.com")
                                                        .match(Match.EXACT)
                                                        .build())
                                                    .build()))
                                            .build()))
                                    .build())
                                .build())
                            .build();

                    SearchAssessmentsResponse res = sdk.assessments().search()
                            .request(req)
                            .call();

                    if (res.assessmentSearchPage().isPresent()) {
                        System.out.println(res.assessmentSearchPage().get().total());
                    }
                }
            }
        - lang: csharp
          label: C#
          source: >
            using NoResponse;

            using NoResponse.Models.Shared;

            using System;

            using System.Collections.Generic;


            var sdk = new NoResponseClient(apiKey:
            Environment.GetEnvironmentVariable("NORESPONSE_API_KEY"));


            AssessmentSearchRequest req = new AssessmentSearchRequest() {
                From = "2026-10-01T00:00:00Z",
                To = "2026-10-02T00:00:00Z",
                IdentifierExpression = new IdentifierExpression() {
                    Scope = ScopeEnum.Assessment,
                    Expression = new IdentifierExpressionNode() {
                        And = new List<IdentifierExpressionNodeLevelTwo>() {
                            new IdentifierExpressionNodeLevelTwo() {
                                Term = new IdentifierSearch() {
                                    Kind = IdentifierSearchKind.Phone,
                                    Value = "+14155552671",
                                    Match = Match.Canonical,
                                },
                            },
                            new IdentifierExpressionNodeLevelTwo() {
                                Or = new List<IdentifierExpressionNodeLevelOne>() {
                                    new IdentifierExpressionNodeLevelOne() {
                                        Term = new IdentifierSearch() {
                                            Kind = IdentifierSearchKind.Email,
                                            Value = "case@example.com",
                                            Match = Match.Exact,
                                        },
                                    },
                                    new IdentifierExpressionNodeLevelOne() {
                                        Term = new IdentifierSearch() {
                                            Kind = IdentifierSearchKind.Email,
                                            Value = "other@example.com",
                                            Match = Match.Exact,
                                        },
                                    },
                                },
                            },
                        },
                    },
                },
            };


            var res = await sdk.Assessments.SearchAsync(req);


            // handle response
        - lang: php
          label: PHP
          source: |
            <?php

            declare(strict_types=1);

            require 'vendor/autoload.php';

            use NoResponse;
            use NoResponse\Models\Shared;

            $sdk = NoResponse\NoResponseClient::builder()
                ->setSecurity(
                    getenv('NORESPONSE_API_KEY') ?: ''
                )
                ->build();

            $request = new Shared\AssessmentSearchRequest(
                from: '2026-10-01T00:00:00Z',
                to: '2026-10-02T00:00:00Z',
                identifierExpression: new Shared\IdentifierExpression(
                    scope: Shared\ScopeEnum::Assessment,
                    expression: new Shared\IdentifierExpressionNode(
                        and: [
                            new Shared\IdentifierExpressionNodeLevelTwo(
                                term: new Shared\IdentifierSearch(
                                    kind: Shared\IdentifierSearchKind::Phone,
                                    value: '+14155552671',
                                    match: Shared\MatchT::Canonical,
                                ),
                            ),
                            new Shared\IdentifierExpressionNodeLevelTwo(
                                or: [
                                    new Shared\IdentifierExpressionNodeLevelOne(
                                        term: new Shared\IdentifierSearch(
                                            kind: Shared\IdentifierSearchKind::Email,
                                            value: 'case@example.com',
                                            match: Shared\MatchT::Exact,
                                        ),
                                    ),
                                    new Shared\IdentifierExpressionNodeLevelOne(
                                        term: new Shared\IdentifierSearch(
                                            kind: Shared\IdentifierSearchKind::Email,
                                            value: 'other@example.com',
                                            match: Shared\MatchT::Exact,
                                        ),
                                    ),
                                ],
                            ),
                        ],
                    ),
                ),
            );

            $response = $sdk->assessments->search(
                request: $request
            );

            $result = $response->result;
            // handle response
        - lang: ruby
          label: Ruby
          source: |
            require 'noresponse'

            Models = ::NoResponse::Models
            s = ::NoResponse::NoResponseClient.new(
              api_key: ENV.fetch('NORESPONSE_API_KEY', '')
            )

            req = Models::Shared::AssessmentSearchRequest.new(
              from: '2026-10-01T00:00:00Z',
              to: '2026-10-02T00:00:00Z',
              identifier_expression: Models::Shared::IdentifierExpression.new(
                scope: Models::Shared::ScopeEnum::ASSESSMENT,
                expression: Models::Shared::IdentifierExpressionNode.new(
                  and_: [
                    Models::Shared::IdentifierExpressionNodeLevelTwo.new(
                      term: Models::Shared::IdentifierSearch.new(
                        kind: Models::Shared::IdentifierSearchKind::PHONE,
                        value: '+14155552671',
                        match: Models::Shared::Match::CANONICAL
                      )
                    ),
                    Models::Shared::IdentifierExpressionNodeLevelTwo.new(
                      or_: [
                        Models::Shared::IdentifierExpressionNodeLevelOne.new(
                          term: Models::Shared::IdentifierSearch.new(
                            kind: Models::Shared::IdentifierSearchKind::EMAIL,
                            value: 'case@example.com',
                            match: Models::Shared::Match::EXACT
                          )
                        ),
                        Models::Shared::IdentifierExpressionNodeLevelOne.new(
                          term: Models::Shared::IdentifierSearch.new(
                            kind: Models::Shared::IdentifierSearchKind::EMAIL,
                            value: 'other@example.com',
                            match: Models::Shared::Match::EXACT
                          )
                        ),
                      ]
                    ),
                  ]
                )
              )
            )
            res = s.assessments.search(request: req)

            unless res.nil?
              # handle response
            end
components:
  schemas:
    AssessmentSearchRequest:
      title: Workspace assessment search
      description: >-
        Search retained assessments created in [from,to), at most 366 days.
        identifier matches the submitted value of each returned assessment
        directly. The legacy email filter keeps its account-wide mailbox
        semantics and cannot be combined with identifier. Other filters combine
        using AND and describe assessment decisions, separate from current
        account decisions. Results use newest-created order with an
        assessment-ID tie break and are live, not a snapshot across pages.
        Requires history or investigate authority; identifier,
        identifier_expression and email filtering also require identifier-read
        permission. Detailed response mode additionally requires detailed
        permission. No Idempotency-Key. identifier_expression requires scope
        assessment and matches the complete expression within each returned
        submission; account scope returns 400 invalid_request. At most 8 raw
        terms and 3 group levels. Mutually exclusive with identifier and email.
      type: object
      additionalProperties: false
      required:
        - from
        - to
      properties:
        from:
          type: string
          format: date-time
        to:
          type: string
          format: date-time
        account_id:
          type: string
          minLength: 1
          maxLength: 128
          pattern: ^[A-Za-z0-9][A-Za-z0-9._:|-]{0,127}$
          description: >-
            The provider's own opaque identifier for the account being checked,
            scoped to the calling workspace. It must be provider-opaque and must
            not contain a direct identifier (email, phone, name, national id):
            that is a provider obligation the schema can only partly check. '|'
            is accepted so an Auth0 user id such as 'auth0|64abc' passes
            unchanged; '@', '+', '$' and whitespace are refused by the pattern,
            as is an exact-shape JWT; a hex digest such as a SHA-256 is allowed,
            because hashing an internal id is a common pseudonymous scheme. A
            value such as '07700900123' or 'jane.doe.gmail.com' cannot be told
            apart from an opaque id. It travels in bodies, and in a URL only as
            the path segment of GET /v1/accounts/{account_id}, its /assessments
            and its /links. An assessment requested by a provider hook at
            pre_registration, which has no account yet, carries the
            server-issued account_id pre: followed by its assessment_id.
          not:
            description: refused_text plus secret_encoded, for account_id.
            anyOf:
              - description: >-
                  A NUL or line feed anywhere, refused with not beside anchored
                  patterns. The parser refuses NUL in every request string. This
                  guard also closes engines where $ accepts a final line feed.
                pattern: '[\x00\n]'
              - description: >-
                  Exact shapes only: a complete modular-crypt password hash
                  (bcrypt $2a$/$2b$/$2x$/$2y$ with a two-digit cost and 53
                  characters; $argon2i/d/id with its m, t, p parameters, salt
                  and hash; md5-crypt $1$, sha256-crypt $5$ or sha512-crypt $6$
                  with a 22, 43 or 86 character hash; passlib $scrypt$ with ln,
                  r, p, salt and hash) or a three-segment JWT whose header is
                  base64url JSON opening with an "alg", "typ", "kid" or "cty"
                  member (eyJhbGciOi, eyJ0eXAiOi, eyJraWQiOi or eyJjdHkiOi). A
                  value that merely starts with '$2' or 'eyJ', such as
                  eyJohnathan.doe.x, is not refused. Best effort, not a
                  guarantee; see the provider obligation in the README.
                anyOf:
                  - pattern: ^\$2[abxy]?\$[0-9]{2}\$[./A-Za-z0-9]{53}$
                  - pattern: >-
                      ^\$argon2(?:id|i|d)\$(?:v=[0-9]{1,4}\$)?m=[0-9]{1,10},t=[0-9]{1,10},p=[0-9]{1,3}\$[A-Za-z0-9+/]{8,}\$[A-Za-z0-9+/]{16,}$
                  - pattern: >-
                      ^\$[156]\$(?:rounds=[0-9]{1,9}\$)?[./A-Za-z0-9]{1,16}\$(?:[./A-Za-z0-9]{22}|[./A-Za-z0-9]{43}|[./A-Za-z0-9]{86})$
                  - pattern: >-
                      ^\$scrypt\$ln=[0-9]{1,2},r=[0-9]{1,3},p=[0-9]{1,3}\$[A-Za-z0-9+/.]{8,}\$[A-Za-z0-9+/.]{16,}$
                  - pattern: >-
                      ^eyJ(?:hbGciOi|0eXAiOi|raWQiOi|jdHkiOi)[A-Za-z0-9_-]*\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*$
        email:
          type: string
          minLength: 3
          maxLength: 254
          pattern: ^[^\s\x00-\x1f\x7f]+$
          not:
            pattern: \n
          description: >-
            Assessments of every account that one of its retained admitted
            assessments sent this mailbox as identifiers.email, matched as lists
            match an email entry: case-insensitive, a +tag removed and, at
            gmail.com and googlemail.com, the dots of the local part ignored.
            Only assessments stored since email list matching began carry the
            mailbox. An address that is not a valid mailbox is refused with 400.
        flow:
          enum:
            - account_creation
            - login
            - purchase
          description: >-
            The event an assessment is made for: account_creation (a user
            creates an account), login (a user returns to an existing account)
            or purchase (a payment or a credit grant). The account's risk is
            reported with the decision for this flow.
        status:
          enum:
            - complete
            - partial
            - pending
          description: >-
            Processing state, separate from evidence coverage. complete: final;
            nothing is still running, but unsupported, failed or unanswered
            lanes remain in incomplete_sources. partial: a recommendation exists
            and evidence is incomplete; assessment_url identifies continuing
            work when present. pending: no recommendation yet; poll or wait for
            the webhook. Finished processing does not mean all sources answered.
        origin:
          enum:
            - api
            - lookup
          default: api
          description: >-
            api (the default) searches the assessments your integration sent.
            lookup searches the assessments your team ran by hand on the
            console's Lookup page. The API sets an assessment's origin from the
            credential that sent it. A lookup is not in any other list, count,
            webhook event or account.
        recommendation:
          enum:
            - allow
            - step_up
            - review
          description: Advisory only. The provider decides and enforces.
        limit:
          type: integer
          minimum: 1
          maximum: 50
          default: 20
        cursor:
          type: string
          minLength: 1
          maxLength: 1024
          pattern: ^[A-Za-z0-9_-]+$
          not:
            pattern: \n
          description: >-
            Opaque, expiring cursor bound to workspace, environment, operation
            and all filters, including expression scope, ordered structure and
            original term values. Keep grouping, operand order, matching modes
            and values unchanged; an omitted match is equivalent to exact. The
            page limit may change.
        response_mode:
          enum:
            - standard
            - detailed
          default: standard
        decision:
          type: string
          enum:
            - allow
            - step_up
            - review
            - block
          description: >-
            The decision of the assessment's latest stored revision, or with
            revision first its first answer: block when its stored risk.block is
            true, otherwise its recommendation. This is not the account's
            current decision or held-admission state. Combined with
            recommendation using AND.
        revision:
          enum:
            - latest
            - first
          description: >-
            latest (the default) searches and returns each assessment's latest
            stored revision; first searches and returns its first answer, the
            revision POST /v1/assessments/aggregate counts. The filters describe
            that revision.
        band:
          enum:
            - low
            - medium
            - high
            - critical
        reason:
          enum:
            - no_digital_footprint
            - voip_number
            - disposable_email
            - new_email
            - no_email_matches
            - spam_reports
            - fraud_flag
            - identity_mismatch
            - country_mismatch
            - proxy_ip
            - seen_before
            - shared_ip
            - many_recent_accounts
            - established_accounts
            - aged_identity
            - breach_name_match
            - breach_cooccurrence
            - breach_name_mismatch
            - breach_phone_mismatch
            - recent_password_exposure
            - credential_list_exposure
            - abuse_ecosystem_member
            - no_breach_history
            - automation_fast_submit
            - client_clock_skew
            - bot_or_automation
            - auth_email_verified
            - auth_phone_verified
            - auth_mfa_recent
            - auth_new_session
            - auth_new_account
            - auth_impersonated
            - context_timezone_mismatch
            - context_locale_mismatch
            - context_line_country_mismatch
            - prior_abuse_link
            - test_scenario
            - shared_api_key
            - list_match
            - young_email_domain
            - email_domain_no_mx
            - email_domain_nonexistent
            - google_account_missing
            - google_empty_account
            - google_active_profile
            - google_aged_account
            - google_name_match
            - google_name_mismatch
            - google_country_match
            - google_country_mismatch
            - forum_sanctioned
            - prior_payment_abuse
            - ip_history_match
            - identity_attribute_conflict
            - impossible_identity_age
            - breach_shared_ip
            - nationality_mismatch
            - minor_identity
            - reported_account_abuse
            - breach_city_match
            - breach_city_mismatch
          description: A reason fired by the selected stored revision.
        impact:
          enum:
            - none
            - low
            - medium
            - high
          description: The selected reason's served impact band. Requires reason.
        lane:
          enum:
            - accounts
            - phone
            - breach
            - domain
            - ip
          description: An incomplete lane in the selected stored revision.
        country:
          type: string
          pattern: ^[A-Z]{2}$
          not:
            pattern: \n
        asn:
          type: integer
          minimum: 1
          maximum: 4294967295
        score_min:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            Inclusive lower score bound. Pending answers without a score do not
            match.
        score_max:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            Inclusive upper score bound, at least score_min when both are
            supplied.
        list_match:
          enum:
            - allow
            - block
            - none
          description: >-
            The list action captured at the first answer. Requires revision
            first. Older answers without captured list state do not match,
            including none.
        changed:
          type: boolean
          description: >-
            true returns only assessments whose latest stored revision's
            decision differs from their first answer's decision (see decision);
            false only the others. An assessment whose first answer or latest
            revision has no decision yet is not changed. Cannot be combined with
            revision first.
        identifier:
          title: Identifier search
          description: >-
            Match a retained assessment's submitted identifier directly.
            Mutually exclusive with identifier_expression and legacy email. All
            other supported filters combine using AND.
          type: object
          additionalProperties: false
          required:
            - kind
            - value
          properties:
            kind:
              type: string
              enum:
                - email
                - phone
                - username
            value:
              type: string
              minLength: 1
              maxLength: 254
              description: >-
                The comparison value. Stored original identifiers remain
                unchanged. An invalid identifier is refused instead of returning
                an empty result.
              pattern: ^[^\x00-\x1f\x7f]+$
              not:
                pattern: \n
            match:
              type: string
              enum:
                - exact
                - canonical
                - mailbox
              default: exact
              description: >-
                exact compares the original submitted value; canonical uses
                identifier-specific normalisation; mailbox explicitly selects
                the email alias rules used by lists.
            namespace:
              type: string
              enum:
                - customer
              description: >-
                Required for username: the username submitted by this customer
                in this workspace/environment. It does not name or join a source
                platform. Omit for email and phone.
          allOf:
            - if:
                properties:
                  kind:
                    const: username
                required:
                  - kind
              then:
                required:
                  - namespace
                properties:
                  value:
                    maxLength: 64
              else:
                not:
                  required:
                    - namespace
            - if:
                properties:
                  match:
                    const: mailbox
                required:
                  - match
              then:
                properties:
                  kind:
                    const: email
            - if:
                properties:
                  kind:
                    const: phone
                required:
                  - kind
              then:
                properties:
                  value:
                    maxLength: 64
          examples:
            - kind: username
              value: janedoe
              match: canonical
              namespace: customer
            - kind: email
              value: Jane.Doe+case@example.com
              match: canonical
            - kind: phone
              value: +1 (415) 555-2671
              match: canonical
        identifier_expression:
          title: Submitted identifier expression
          description: >-
            Explicit bounded AND/OR combinations. Mutually exclusive with
            identifier and legacy email. Other supported filters combine using
            AND.
          type: object
          additionalProperties: false
          required:
            - scope
            - expression
          properties:
            scope:
              type: string
              enum:
                - assessment
                - account
              description: >-
                assessment requires one submission to satisfy the complete
                expression. account permits witnesses across retained
                submissions of one account and is supported only by POST
                /v1/accounts/search. No default: select scope explicitly.
            expression:
              type: object
              additionalProperties: false
              properties:
                term:
                  title: Identifier search
                  description: >-
                    One customer-submitted identifier. Defaults to exact
                    comparison of the original submitted value. canonical uses
                    the supported identifier normalisation without an ownership
                    claim: email preserves local-part case, NFC-normalises it
                    and lowercases the domain without removing dots or tags;
                    phone uses international E.164 without extensions or an
                    inferred region; username uses NFC and Unicode case folding
                    within the customer namespace. mailbox is email-only and
                    explicitly selects existing list rules: case-insensitive,
                    remove +tag, and ignore local-part dots at gmail.com and
                    googlemail.com; googlemail.com maps to gmail.com. Username
                    requires namespace customer. Email and phone forbid
                    namespace. Source-discovered identifiers and platform
                    handles are not searched. Unsupported kinds, namespaces,
                    modes and invalid values return 400. Search equality does
                    not establish verified ownership or merge accounts.
                  type: object
                  additionalProperties: false
                  required:
                    - kind
                    - value
                  properties:
                    kind:
                      type: string
                      enum:
                        - email
                        - phone
                        - username
                    value:
                      type: string
                      minLength: 1
                      maxLength: 254
                      description: >-
                        The comparison value. Stored original identifiers remain
                        unchanged. An invalid identifier is refused instead of
                        returning an empty result.
                      pattern: ^[^\x00-\x1f\x7f]+$
                      not:
                        pattern: \n
                    match:
                      type: string
                      enum:
                        - exact
                        - canonical
                        - mailbox
                      default: exact
                      description: >-
                        exact compares the original submitted value; canonical
                        uses identifier-specific normalisation; mailbox
                        explicitly selects the email alias rules used by lists.
                    namespace:
                      type: string
                      enum:
                        - customer
                      description: >-
                        Required for username: the username submitted by this
                        customer in this workspace/environment. It does not name
                        or join a source platform. Omit for email and phone.
                  allOf:
                    - if:
                        properties:
                          kind:
                            const: username
                        required:
                          - kind
                      then:
                        required:
                          - namespace
                        properties:
                          value:
                            maxLength: 64
                      else:
                        not:
                          required:
                            - namespace
                    - if:
                        properties:
                          match:
                            const: mailbox
                        required:
                          - match
                      then:
                        properties:
                          kind:
                            const: email
                    - if:
                        properties:
                          kind:
                            const: phone
                        required:
                          - kind
                      then:
                        properties:
                          value:
                            maxLength: 64
                  examples:
                    - kind: username
                      value: janedoe
                      match: canonical
                      namespace: customer
                    - kind: email
                      value: Jane.Doe+case@example.com
                      match: canonical
                    - kind: phone
                      value: +1 (415) 555-2671
                      match: canonical
                and:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                      and:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                      or:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                    anyOf:
                      - required:
                          - term
                      - required:
                          - and
                      - required:
                          - or
                    allOf:
                      - not:
                          required:
                            - term
                            - and
                      - not:
                          required:
                            - term
                            - or
                      - not:
                          required:
                            - and
                            - or
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
                or:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                      and:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                      or:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                    anyOf:
                      - required:
                          - term
                      - required:
                          - and
                      - required:
                          - or
                    allOf:
                      - not:
                          required:
                            - term
                            - and
                      - not:
                          required:
                            - term
                            - or
                      - not:
                          required:
                            - and
                            - or
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
              anyOf:
                - required:
                    - term
                - required:
                    - and
                - required:
                    - or
              allOf:
                - not:
                    required:
                      - term
                      - and
                - not:
                    required:
                      - term
                      - or
                - not:
                    required:
                      - and
                      - or
              examples:
                - term:
                    kind: email
                    value: case@example.com
                    match: exact
          $defs:
            identifier_expression_node:
              type: object
              additionalProperties: false
              properties:
                term:
                  title: Identifier search
                  description: >-
                    One customer-submitted identifier. Defaults to exact
                    comparison of the original submitted value. canonical uses
                    the supported identifier normalisation without an ownership
                    claim: email preserves local-part case, NFC-normalises it
                    and lowercases the domain without removing dots or tags;
                    phone uses international E.164 without extensions or an
                    inferred region; username uses NFC and Unicode case folding
                    within the customer namespace. mailbox is email-only and
                    explicitly selects existing list rules: case-insensitive,
                    remove +tag, and ignore local-part dots at gmail.com and
                    googlemail.com; googlemail.com maps to gmail.com. Username
                    requires namespace customer. Email and phone forbid
                    namespace. Source-discovered identifiers and platform
                    handles are not searched. Unsupported kinds, namespaces,
                    modes and invalid values return 400. Search equality does
                    not establish verified ownership or merge accounts.
                  type: object
                  additionalProperties: false
                  required:
                    - kind
                    - value
                  properties:
                    kind:
                      type: string
                      enum:
                        - email
                        - phone
                        - username
                    value:
                      type: string
                      minLength: 1
                      maxLength: 254
                      description: >-
                        The comparison value. Stored original identifiers remain
                        unchanged. An invalid identifier is refused instead of
                        returning an empty result.
                      pattern: ^[^\x00-\x1f\x7f]+$
                      not:
                        pattern: \n
                    match:
                      type: string
                      enum:
                        - exact
                        - canonical
                        - mailbox
                      default: exact
                      description: >-
                        exact compares the original submitted value; canonical
                        uses identifier-specific normalisation; mailbox
                        explicitly selects the email alias rules used by lists.
                    namespace:
                      type: string
                      enum:
                        - customer
                      description: >-
                        Required for username: the username submitted by this
                        customer in this workspace/environment. It does not name
                        or join a source platform. Omit for email and phone.
                  allOf:
                    - if:
                        properties:
                          kind:
                            const: username
                        required:
                          - kind
                      then:
                        required:
                          - namespace
                        properties:
                          value:
                            maxLength: 64
                      else:
                        not:
                          required:
                            - namespace
                    - if:
                        properties:
                          match:
                            const: mailbox
                        required:
                          - match
                      then:
                        properties:
                          kind:
                            const: email
                    - if:
                        properties:
                          kind:
                            const: phone
                        required:
                          - kind
                      then:
                        properties:
                          value:
                            maxLength: 64
                  examples:
                    - kind: username
                      value: janedoe
                      match: canonical
                      namespace: customer
                    - kind: email
                      value: Jane.Doe+case@example.com
                      match: canonical
                    - kind: phone
                      value: +1 (415) 555-2671
                      match: canonical
                and:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                      and:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                      or:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                    anyOf:
                      - required:
                          - term
                      - required:
                          - and
                      - required:
                          - or
                    allOf:
                      - not:
                          required:
                            - term
                            - and
                      - not:
                          required:
                            - term
                            - or
                      - not:
                          required:
                            - and
                            - or
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
                or:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                      and:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                      or:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                            and:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                            or:
                              type: array
                              minItems: 2
                              maxItems: 8
                              items:
                                type: object
                                additionalProperties: false
                                properties:
                                  term:
                                    title: Identifier search
                                    description: >-
                                      One customer-submitted identifier.
                                      Defaults to exact comparison of the
                                      original submitted value. canonical uses
                                      the supported identifier normalisation
                                      without an ownership claim: email
                                      preserves local-part case, NFC-normalises
                                      it and lowercases the domain without
                                      removing dots or tags; phone uses
                                      international E.164 without extensions or
                                      an inferred region; username uses NFC and
                                      Unicode case folding within the customer
                                      namespace. mailbox is email-only and
                                      explicitly selects existing list rules:
                                      case-insensitive, remove +tag, and ignore
                                      local-part dots at gmail.com and
                                      googlemail.com; googlemail.com maps to
                                      gmail.com. Username requires namespace
                                      customer. Email and phone forbid
                                      namespace. Source-discovered identifiers
                                      and platform handles are not searched.
                                      Unsupported kinds, namespaces, modes and
                                      invalid values return 400. Search equality
                                      does not establish verified ownership or
                                      merge accounts.
                                    type: object
                                    additionalProperties: false
                                    required:
                                      - kind
                                      - value
                                    properties:
                                      kind:
                                        type: string
                                        enum:
                                          - email
                                          - phone
                                          - username
                                      value:
                                        type: string
                                        minLength: 1
                                        maxLength: 254
                                        description: >-
                                          The comparison value. Stored original
                                          identifiers remain unchanged. An invalid
                                          identifier is refused instead of
                                          returning an empty result.
                                        pattern: ^[^\x00-\x1f\x7f]+$
                                        not:
                                          pattern: \n
                                      match:
                                        type: string
                                        enum:
                                          - exact
                                          - canonical
                                          - mailbox
                                        default: exact
                                        description: >-
                                          exact compares the original submitted
                                          value; canonical uses
                                          identifier-specific normalisation;
                                          mailbox explicitly selects the email
                                          alias rules used by lists.
                                      namespace:
                                        type: string
                                        enum:
                                          - customer
                                        description: >-
                                          Required for username: the username
                                          submitted by this customer in this
                                          workspace/environment. It does not name
                                          or join a source platform. Omit for
                                          email and phone.
                                    allOf:
                                      - if:
                                          properties:
                                            kind:
                                              const: username
                                          required:
                                            - kind
                                        then:
                                          required:
                                            - namespace
                                          properties:
                                            value:
                                              maxLength: 64
                                        else:
                                          not:
                                            required:
                                              - namespace
                                      - if:
                                          properties:
                                            match:
                                              const: mailbox
                                          required:
                                            - match
                                        then:
                                          properties:
                                            kind:
                                              const: email
                                      - if:
                                          properties:
                                            kind:
                                              const: phone
                                          required:
                                            - kind
                                        then:
                                          properties:
                                            value:
                                              maxLength: 64
                                    examples:
                                      - kind: username
                                        value: janedoe
                                        match: canonical
                                        namespace: customer
                                      - kind: email
                                        value: Jane.Doe+case@example.com
                                        match: canonical
                                      - kind: phone
                                        value: +1 (415) 555-2671
                                        match: canonical
                                required:
                                  - term
                                examples:
                                  - term:
                                      kind: email
                                      value: case@example.com
                                      match: exact
                          anyOf:
                            - required:
                                - term
                            - required:
                                - and
                            - required:
                                - or
                          allOf:
                            - not:
                                required:
                                  - term
                                  - and
                            - not:
                                required:
                                  - term
                                  - or
                            - not:
                                required:
                                  - and
                                  - or
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                    anyOf:
                      - required:
                          - term
                      - required:
                          - and
                      - required:
                          - or
                    allOf:
                      - not:
                          required:
                            - term
                            - and
                      - not:
                          required:
                            - term
                            - or
                      - not:
                          required:
                            - and
                            - or
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
              anyOf:
                - required:
                    - term
                - required:
                    - and
                - required:
                    - or
              allOf:
                - not:
                    required:
                      - term
                      - and
                - not:
                    required:
                      - term
                      - or
                - not:
                    required:
                      - and
                      - or
              examples:
                - term:
                    kind: email
                    value: case@example.com
                    match: exact
            identifier_expression_node_level_two:
              type: object
              additionalProperties: false
              properties:
                term:
                  title: Identifier search
                  description: >-
                    One customer-submitted identifier. Defaults to exact
                    comparison of the original submitted value. canonical uses
                    the supported identifier normalisation without an ownership
                    claim: email preserves local-part case, NFC-normalises it
                    and lowercases the domain without removing dots or tags;
                    phone uses international E.164 without extensions or an
                    inferred region; username uses NFC and Unicode case folding
                    within the customer namespace. mailbox is email-only and
                    explicitly selects existing list rules: case-insensitive,
                    remove +tag, and ignore local-part dots at gmail.com and
                    googlemail.com; googlemail.com maps to gmail.com. Username
                    requires namespace customer. Email and phone forbid
                    namespace. Source-discovered identifiers and platform
                    handles are not searched. Unsupported kinds, namespaces,
                    modes and invalid values return 400. Search equality does
                    not establish verified ownership or merge accounts.
                  type: object
                  additionalProperties: false
                  required:
                    - kind
                    - value
                  properties:
                    kind:
                      type: string
                      enum:
                        - email
                        - phone
                        - username
                    value:
                      type: string
                      minLength: 1
                      maxLength: 254
                      description: >-
                        The comparison value. Stored original identifiers remain
                        unchanged. An invalid identifier is refused instead of
                        returning an empty result.
                      pattern: ^[^\x00-\x1f\x7f]+$
                      not:
                        pattern: \n
                    match:
                      type: string
                      enum:
                        - exact
                        - canonical
                        - mailbox
                      default: exact
                      description: >-
                        exact compares the original submitted value; canonical
                        uses identifier-specific normalisation; mailbox
                        explicitly selects the email alias rules used by lists.
                    namespace:
                      type: string
                      enum:
                        - customer
                      description: >-
                        Required for username: the username submitted by this
                        customer in this workspace/environment. It does not name
                        or join a source platform. Omit for email and phone.
                  allOf:
                    - if:
                        properties:
                          kind:
                            const: username
                        required:
                          - kind
                      then:
                        required:
                          - namespace
                        properties:
                          value:
                            maxLength: 64
                      else:
                        not:
                          required:
                            - namespace
                    - if:
                        properties:
                          match:
                            const: mailbox
                        required:
                          - match
                      then:
                        properties:
                          kind:
                            const: email
                    - if:
                        properties:
                          kind:
                            const: phone
                        required:
                          - kind
                      then:
                        properties:
                          value:
                            maxLength: 64
                  examples:
                    - kind: username
                      value: janedoe
                      match: canonical
                      namespace: customer
                    - kind: email
                      value: Jane.Doe+case@example.com
                      match: canonical
                    - kind: phone
                      value: +1 (415) 555-2671
                      match: canonical
                and:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                      and:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                          required:
                            - term
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                      or:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                          required:
                            - term
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                    anyOf:
                      - required:
                          - term
                      - required:
                          - and
                      - required:
                          - or
                    allOf:
                      - not:
                          required:
                            - term
                            - and
                      - not:
                          required:
                            - term
                            - or
                      - not:
                          required:
                            - and
                            - or
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
                or:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                      and:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                          required:
                            - term
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                      or:
                        type: array
                        minItems: 2
                        maxItems: 8
                        items:
                          type: object
                          additionalProperties: false
                          properties:
                            term:
                              title: Identifier search
                              description: >-
                                One customer-submitted identifier. Defaults to
                                exact comparison of the original submitted
                                value. canonical uses the supported identifier
                                normalisation without an ownership claim: email
                                preserves local-part case, NFC-normalises it and
                                lowercases the domain without removing dots or
                                tags; phone uses international E.164 without
                                extensions or an inferred region; username uses
                                NFC and Unicode case folding within the customer
                                namespace. mailbox is email-only and explicitly
                                selects existing list rules: case-insensitive,
                                remove +tag, and ignore local-part dots at
                                gmail.com and googlemail.com; googlemail.com
                                maps to gmail.com. Username requires namespace
                                customer. Email and phone forbid namespace.
                                Source-discovered identifiers and platform
                                handles are not searched. Unsupported kinds,
                                namespaces, modes and invalid values return 400.
                                Search equality does not establish verified
                                ownership or merge accounts.
                              type: object
                              additionalProperties: false
                              required:
                                - kind
                                - value
                              properties:
                                kind:
                                  type: string
                                  enum:
                                    - email
                                    - phone
                                    - username
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 254
                                  description: >-
                                    The comparison value. Stored original
                                    identifiers remain unchanged. An invalid
                                    identifier is refused instead of returning
                                    an empty result.
                                  pattern: ^[^\x00-\x1f\x7f]+$
                                  not:
                                    pattern: \n
                                match:
                                  type: string
                                  enum:
                                    - exact
                                    - canonical
                                    - mailbox
                                  default: exact
                                  description: >-
                                    exact compares the original submitted value;
                                    canonical uses identifier-specific
                                    normalisation; mailbox explicitly selects
                                    the email alias rules used by lists.
                                namespace:
                                  type: string
                                  enum:
                                    - customer
                                  description: >-
                                    Required for username: the username
                                    submitted by this customer in this
                                    workspace/environment. It does not name or
                                    join a source platform. Omit for email and
                                    phone.
                              allOf:
                                - if:
                                    properties:
                                      kind:
                                        const: username
                                    required:
                                      - kind
                                  then:
                                    required:
                                      - namespace
                                    properties:
                                      value:
                                        maxLength: 64
                                  else:
                                    not:
                                      required:
                                        - namespace
                                - if:
                                    properties:
                                      match:
                                        const: mailbox
                                    required:
                                      - match
                                  then:
                                    properties:
                                      kind:
                                        const: email
                                - if:
                                    properties:
                                      kind:
                                        const: phone
                                    required:
                                      - kind
                                  then:
                                    properties:
                                      value:
                                        maxLength: 64
                              examples:
                                - kind: username
                                  value: janedoe
                                  match: canonical
                                  namespace: customer
                                - kind: email
                                  value: Jane.Doe+case@example.com
                                  match: canonical
                                - kind: phone
                                  value: +1 (415) 555-2671
                                  match: canonical
                          required:
                            - term
                          examples:
                            - term:
                                kind: email
                                value: case@example.com
                                match: exact
                    anyOf:
                      - required:
                          - term
                      - required:
                          - and
                      - required:
                          - or
                    allOf:
                      - not:
                          required:
                            - term
                            - and
                      - not:
                          required:
                            - term
                            - or
                      - not:
                          required:
                            - and
                            - or
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
              anyOf:
                - required:
                    - term
                - required:
                    - and
                - required:
                    - or
              allOf:
                - not:
                    required:
                      - term
                      - and
                - not:
                    required:
                      - term
                      - or
                - not:
                    required:
                      - and
                      - or
              examples:
                - term:
                    kind: email
                    value: case@example.com
                    match: exact
            identifier_expression_node_level_one:
              type: object
              additionalProperties: false
              properties:
                term:
                  title: Identifier search
                  description: >-
                    One customer-submitted identifier. Defaults to exact
                    comparison of the original submitted value. canonical uses
                    the supported identifier normalisation without an ownership
                    claim: email preserves local-part case, NFC-normalises it
                    and lowercases the domain without removing dots or tags;
                    phone uses international E.164 without extensions or an
                    inferred region; username uses NFC and Unicode case folding
                    within the customer namespace. mailbox is email-only and
                    explicitly selects existing list rules: case-insensitive,
                    remove +tag, and ignore local-part dots at gmail.com and
                    googlemail.com; googlemail.com maps to gmail.com. Username
                    requires namespace customer. Email and phone forbid
                    namespace. Source-discovered identifiers and platform
                    handles are not searched. Unsupported kinds, namespaces,
                    modes and invalid values return 400. Search equality does
                    not establish verified ownership or merge accounts.
                  type: object
                  additionalProperties: false
                  required:
                    - kind
                    - value
                  properties:
                    kind:
                      type: string
                      enum:
                        - email
                        - phone
                        - username
                    value:
                      type: string
                      minLength: 1
                      maxLength: 254
                      description: >-
                        The comparison value. Stored original identifiers remain
                        unchanged. An invalid identifier is refused instead of
                        returning an empty result.
                      pattern: ^[^\x00-\x1f\x7f]+$
                      not:
                        pattern: \n
                    match:
                      type: string
                      enum:
                        - exact
                        - canonical
                        - mailbox
                      default: exact
                      description: >-
                        exact compares the original submitted value; canonical
                        uses identifier-specific normalisation; mailbox
                        explicitly selects the email alias rules used by lists.
                    namespace:
                      type: string
                      enum:
                        - customer
                      description: >-
                        Required for username: the username submitted by this
                        customer in this workspace/environment. It does not name
                        or join a source platform. Omit for email and phone.
                  allOf:
                    - if:
                        properties:
                          kind:
                            const: username
                        required:
                          - kind
                      then:
                        required:
                          - namespace
                        properties:
                          value:
                            maxLength: 64
                      else:
                        not:
                          required:
                            - namespace
                    - if:
                        properties:
                          match:
                            const: mailbox
                        required:
                          - match
                      then:
                        properties:
                          kind:
                            const: email
                    - if:
                        properties:
                          kind:
                            const: phone
                        required:
                          - kind
                      then:
                        properties:
                          value:
                            maxLength: 64
                  examples:
                    - kind: username
                      value: janedoe
                      match: canonical
                      namespace: customer
                    - kind: email
                      value: Jane.Doe+case@example.com
                      match: canonical
                    - kind: phone
                      value: +1 (415) 555-2671
                      match: canonical
                and:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                    required:
                      - term
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
                or:
                  type: array
                  minItems: 2
                  maxItems: 8
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      term:
                        title: Identifier search
                        description: >-
                          One customer-submitted identifier. Defaults to exact
                          comparison of the original submitted value. canonical
                          uses the supported identifier normalisation without an
                          ownership claim: email preserves local-part case,
                          NFC-normalises it and lowercases the domain without
                          removing dots or tags; phone uses international E.164
                          without extensions or an inferred region; username
                          uses NFC and Unicode case folding within the customer
                          namespace. mailbox is email-only and explicitly
                          selects existing list rules: case-insensitive, remove
                          +tag, and ignore local-part dots at gmail.com and
                          googlemail.com; googlemail.com maps to gmail.com.
                          Username requires namespace customer. Email and phone
                          forbid namespace. Source-discovered identifiers and
                          platform handles are not searched. Unsupported kinds,
                          namespaces, modes and invalid values return 400.
                          Search equality does not establish verified ownership
                          or merge accounts.
                        type: object
                        additionalProperties: false
                        required:
                          - kind
                          - value
                        properties:
                          kind:
                            type: string
                            enum:
                              - email
                              - phone
                              - username
                          value:
                            type: string
                            minLength: 1
                            maxLength: 254
                            description: >-
                              The comparison value. Stored original identifiers
                              remain unchanged. An invalid identifier is refused
                              instead of returning an empty result.
                            pattern: ^[^\x00-\x1f\x7f]+$
                            not:
                              pattern: \n
                          match:
                            type: string
                            enum:
                              - exact
                              - canonical
                              - mailbox
                            default: exact
                            description: >-
                              exact compares the original submitted value;
                              canonical uses identifier-specific normalisation;
                              mailbox explicitly selects the email alias rules
                              used by lists.
                          namespace:
                            type: string
                            enum:
                              - customer
                            description: >-
                              Required for username: the username submitted by
                              this customer in this workspace/environment. It
                              does not name or join a source platform. Omit for
                              email and phone.
                        allOf:
                          - if:
                              properties:
                                kind:
                                  const: username
                              required:
                                - kind
                            then:
                              required:
                                - namespace
                              properties:
                                value:
                                  maxLength: 64
                            else:
                              not:
                                required:
                                  - namespace
                          - if:
                              properties:
                                match:
                                  const: mailbox
                              required:
                                - match
                            then:
                              properties:
                                kind:
                                  const: email
                          - if:
                              properties:
                                kind:
                                  const: phone
                              required:
                                - kind
                            then:
                              properties:
                                value:
                                  maxLength: 64
                        examples:
                          - kind: username
                            value: janedoe
                            match: canonical
                            namespace: customer
                          - kind: email
                            value: Jane.Doe+case@example.com
                            match: canonical
                          - kind: phone
                            value: +1 (415) 555-2671
                            match: canonical
                    required:
                      - term
                    examples:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
              anyOf:
                - required:
                    - term
                - required:
                    - and
                - required:
                    - or
              allOf:
                - not:
                    required:
                      - term
                      - and
                - not:
                    required:
                      - term
                      - or
                - not:
                    required:
                      - and
                      - or
              examples:
                - term:
                    kind: email
                    value: case@example.com
                    match: exact
            identifier_expression_leaf:
              type: object
              additionalProperties: false
              properties:
                term:
                  title: Identifier search
                  description: >-
                    One customer-submitted identifier. Defaults to exact
                    comparison of the original submitted value. canonical uses
                    the supported identifier normalisation without an ownership
                    claim: email preserves local-part case, NFC-normalises it
                    and lowercases the domain without removing dots or tags;
                    phone uses international E.164 without extensions or an
                    inferred region; username uses NFC and Unicode case folding
                    within the customer namespace. mailbox is email-only and
                    explicitly selects existing list rules: case-insensitive,
                    remove +tag, and ignore local-part dots at gmail.com and
                    googlemail.com; googlemail.com maps to gmail.com. Username
                    requires namespace customer. Email and phone forbid
                    namespace. Source-discovered identifiers and platform
                    handles are not searched. Unsupported kinds, namespaces,
                    modes and invalid values return 400. Search equality does
                    not establish verified ownership or merge accounts.
                  type: object
                  additionalProperties: false
                  required:
                    - kind
                    - value
                  properties:
                    kind:
                      type: string
                      enum:
                        - email
                        - phone
                        - username
                    value:
                      type: string
                      minLength: 1
                      maxLength: 254
                      description: >-
                        The comparison value. Stored original identifiers remain
                        unchanged. An invalid identifier is refused instead of
                        returning an empty result.
                      pattern: ^[^\x00-\x1f\x7f]+$
                      not:
                        pattern: \n
                    match:
                      type: string
                      enum:
                        - exact
                        - canonical
                        - mailbox
                      default: exact
                      description: >-
                        exact compares the original submitted value; canonical
                        uses identifier-specific normalisation; mailbox
                        explicitly selects the email alias rules used by lists.
                    namespace:
                      type: string
                      enum:
                        - customer
                      description: >-
                        Required for username: the username submitted by this
                        customer in this workspace/environment. It does not name
                        or join a source platform. Omit for email and phone.
                  allOf:
                    - if:
                        properties:
                          kind:
                            const: username
                        required:
                          - kind
                      then:
                        required:
                          - namespace
                        properties:
                          value:
                            maxLength: 64
                      else:
                        not:
                          required:
                            - namespace
                    - if:
                        properties:
                          match:
                            const: mailbox
                        required:
                          - match
                      then:
                        properties:
                          kind:
                            const: email
                    - if:
                        properties:
                          kind:
                            const: phone
                        required:
                          - kind
                      then:
                        properties:
                          value:
                            maxLength: 64
                  examples:
                    - kind: username
                      value: janedoe
                      match: canonical
                      namespace: customer
                    - kind: email
                      value: Jane.Doe+case@example.com
                      match: canonical
                    - kind: phone
                      value: +1 (415) 555-2671
                      match: canonical
              required:
                - term
              examples:
                - term:
                    kind: email
                    value: case@example.com
                    match: exact
          examples:
            - scope: assessment
              expression:
                and:
                  - term:
                      kind: phone
                      value: '+14155552671'
                      match: canonical
                  - or:
                      - term:
                          kind: email
                          value: case@example.com
                          match: exact
                      - term:
                          kind: email
                          value: other@example.com
                          match: exact
      allOf:
        - if:
            required:
              - impact
          then:
            required:
              - reason
        - if:
            required:
              - list_match
          then:
            required:
              - revision
            properties:
              revision:
                const: first
        - if:
            required:
              - changed
          then:
            not:
              required:
                - revision
              properties:
                revision:
                  const: first
        - not:
            required:
              - email
              - identifier
        - not:
            required:
              - email
              - identifier_expression
        - not:
            required:
              - identifier
              - identifier_expression
        - if:
            required:
              - identifier_expression
          then:
            properties:
              identifier_expression:
                properties:
                  scope:
                    const: assessment
      examples:
        - from: '2026-10-01T00:00:00Z'
          to: '2026-10-02T00:00:00Z'
          identifier:
            kind: username
            value: janedoe
            match: canonical
            namespace: customer
          limit: 20
        - from: '2026-10-01T00:00:00Z'
          to: '2026-10-02T00:00:00Z'
          identifier_expression:
            scope: assessment
            expression:
              and:
                - term:
                    kind: phone
                    value: '+14155552671'
                    match: canonical
                - or:
                    - term:
                        kind: email
                        value: case@example.com
                        match: exact
                    - term:
                        kind: email
                        value: other@example.com
                        match: exact
          limit: 20
    AssessmentSearchPage:
      title: Workspace assessment search page
      description: >-
        A bounded page of latest assessment revisions, newest creation first,
        with how many assessments match the filters. Each item is the revision
        found and its first answer's decision; no current account risk is
        attached.
      type: object
      additionalProperties: false
      required:
        - schema_version
        - items
        - total
        - total_capped
        - retention_days
      properties:
        schema_version:
          const: '1'
          description: Version of the body shape.
        items:
          type: array
          maxItems: 50
          items:
            title: Assessment search item
            description: >-
              One stored assessment revision, exactly as GET
              /v1/assessments/{assessment_id}/versions/{version} returns it,
              with the decision of the assessment's first answer. It is not
              re-scored and carries no current account risk.
            type: object
            additionalProperties: false
            required:
              - schema_version
              - id
              - status
              - flow
              - depth
              - detail
            properties:
              schema_version:
                const: '1'
                description: Version of the body shape.
              id:
                type: string
                pattern: ^asm_[0-9A-HJKMNP-TV-Z]{26}$
                description: This assessment's id, equal to detail.assessment_id.
                not:
                  description: >-
                    A NUL or line feed anywhere, refused with not beside
                    anchored patterns. The parser refuses NUL in every request
                    string. This guard also closes engines where $ accepts a
                    final line feed.
                  pattern: '[\x00\n]'
              status:
                enum:
                  - complete
                  - partial
                  - pending
                description: The status of this exact stored revision.
              flow:
                enum:
                  - account_creation
                  - login
                  - purchase
                description: The flow that created the assessment.
              depth:
                enum:
                  - quick
                  - full
                description: >-
                  The depth the assessment was served at: the request's, or its
                  flow's default. An assessment made before depths existed
                  reports full.
              detail:
                title: Assessment detail
                description: >-
                  This assessment's own facts: its score, recommendation,
                  signals, coverage and timing.
                type: object
                additionalProperties: false
                required:
                  - schema_version
                  - assessment_id
                  - account_id
                  - status
                  - confidence
                  - incomplete_sources
                  - policy_version
                  - policy_basis
                  - assessment_version
                  - created_at
                  - updated_at
                  - expires_at
                  - timing
                properties:
                  schema_version:
                    const: '1'
                    description: Version of the body shape.
                  assessment_id:
                    type: string
                    pattern: ^asm_[0-9A-HJKMNP-TV-Z]{26}$
                    description: >-
                      Opaque, server-assigned assessment id: 'asm_' and a
                      26-character Crockford base32 ULID. Unique within the
                      workspace; another workspace's assessment id answers 404.
                    not:
                      description: >-
                        A NUL or line feed anywhere, refused with not beside
                        anchored patterns. The parser refuses NUL in every
                        request string. This guard also closes engines where $
                        accepts a final line feed.
                      pattern: '[\x00\n]'
                  account_id:
                    type: string
                    minLength: 1
                    maxLength: 128
                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:|-]{0,127}$
                    description: >-
                      The provider's own opaque identifier for the account being
                      checked, scoped to the calling workspace. It must be
                      provider-opaque and must not contain a direct identifier
                      (email, phone, name, national id): that is a provider
                      obligation the schema can only partly check. '|' is
                      accepted so an Auth0 user id such as 'auth0|64abc' passes
                      unchanged; '@', '+', '$' and whitespace are refused by the
                      pattern, as is an exact-shape JWT; a hex digest such as a
                      SHA-256 is allowed, because hashing an internal id is a
                      common pseudonymous scheme. A value such as '07700900123'
                      or 'jane.doe.gmail.com' cannot be told apart from an
                      opaque id. It travels in bodies, and in a URL only as the
                      path segment of GET /v1/accounts/{account_id}, its
                      /assessments and its /links. An assessment requested by a
                      provider hook at pre_registration, which has no account
                      yet, carries the server-issued account_id pre: followed by
                      its assessment_id.
                    not:
                      description: refused_text plus secret_encoded, for account_id.
                      anyOf:
                        - description: >-
                            A NUL or line feed anywhere, refused with not beside
                            anchored patterns. The parser refuses NUL in every
                            request string. This guard also closes engines where
                            $ accepts a final line feed.
                          pattern: '[\x00\n]'
                        - description: >-
                            Exact shapes only: a complete modular-crypt password
                            hash (bcrypt $2a$/$2b$/$2x$/$2y$ with a two-digit
                            cost and 53 characters; $argon2i/d/id with its m, t,
                            p parameters, salt and hash; md5-crypt $1$,
                            sha256-crypt $5$ or sha512-crypt $6$ with a 22, 43
                            or 86 character hash; passlib $scrypt$ with ln, r,
                            p, salt and hash) or a three-segment JWT whose
                            header is base64url JSON opening with an "alg",
                            "typ", "kid" or "cty" member (eyJhbGciOi,
                            eyJ0eXAiOi, eyJraWQiOi or eyJjdHkiOi). A value that
                            merely starts with '$2' or 'eyJ', such as
                            eyJohnathan.doe.x, is not refused. Best effort, not
                            a guarantee; see the provider obligation in the
                            README.
                          anyOf:
                            - pattern: ^\$2[abxy]?\$[0-9]{2}\$[./A-Za-z0-9]{53}$
                            - pattern: >-
                                ^\$argon2(?:id|i|d)\$(?:v=[0-9]{1,4}\$)?m=[0-9]{1,10},t=[0-9]{1,10},p=[0-9]{1,3}\$[A-Za-z0-9+/]{8,}\$[A-Za-z0-9+/]{16,}$
                            - pattern: >-
                                ^\$[156]\$(?:rounds=[0-9]{1,9}\$)?[./A-Za-z0-9]{1,16}\$(?:[./A-Za-z0-9]{22}|[./A-Za-z0-9]{43}|[./A-Za-z0-9]{86})$
                            - pattern: >-
                                ^\$scrypt\$ln=[0-9]{1,2},r=[0-9]{1,3},p=[0-9]{1,3}\$[A-Za-z0-9+/.]{8,}\$[A-Za-z0-9+/.]{16,}$
                            - pattern: >-
                                ^eyJ(?:hbGciOi|0eXAiOi|raWQiOi|jdHkiOi)[A-Za-z0-9_-]*\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*$
                  identifiers:
                    type: object
                    additionalProperties: false
                    minProperties: 1
                    description: >-
                      The identifiers this assessment was sent, exactly as
                      received. Served only to a key holding the history scope,
                      on GET /v1/assessments/{assessment_id} and every history
                      read: an exact version, search, the account's assessments
                      and its export. Absent from the POST /v1/assessments
                      answer (the caller holds what it sent), from every
                      webhook, for a key without the history scope, and for an
                      assessment made before NoResponse kept them.
                    properties:
                      email:
                        type: string
                        minLength: 3
                        maxLength: 254
                        description: identifiers.email as the request sent it.
                      username:
                        type: string
                        minLength: 1
                        maxLength: 64
                        description: identifiers.username as the request sent it.
                      phone:
                        type: string
                        minLength: 9
                        maxLength: 16
                        description: identifiers.phone as the request sent it.
                      name:
                        type: string
                        minLength: 1
                        maxLength: 128
                        description: >-
                          identifiers.name as the request sent it, before NFC
                          normalisation.
                      ip:
                        type: string
                        minLength: 2
                        maxLength: 39
                        description: identifiers.ip as the request sent it.
                  request_id:
                    type: string
                    minLength: 1
                    maxLength: 128
                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                    description: >-
                      An optional provider correlation id, echoed back. It is
                      not an idempotency key. Refuses an exact-shape JWT or a
                      bare 40, 64 or 128 character hex digest; a UUID is
                      accepted.
                    not:
                      description: >-
                        refused_text plus secret_hex_digest and secret_encoded,
                        for request_id and username.
                      anyOf:
                        - description: >-
                            A NUL or line feed anywhere, refused with not beside
                            anchored patterns. The parser refuses NUL in every
                            request string. This guard also closes engines where
                            $ accepts a final line feed.
                          pattern: '[\x00\n]'
                        - description: >-
                            Exactly 40, 64 or 128 hex characters (SHA-1,
                            SHA-256, SHA-512) and nothing else. Refused in
                            username and request_id, where such a value is
                            almost certainly a credential hash; a 39 or 41
                            character hex string, a short hex word such as
                            'deadbeef' or a UUID is accepted. Not refused in
                            account_id: a hex digest of an internal id is a
                            common pseudonymous account id and not a secret
                            under.
                          pattern: >-
                            ^(?:[0-9A-Fa-f]{40}|[0-9A-Fa-f]{64}|[0-9A-Fa-f]{128})$
                        - description: >-
                            Exact shapes only: a complete modular-crypt password
                            hash (bcrypt $2a$/$2b$/$2x$/$2y$ with a two-digit
                            cost and 53 characters; $argon2i/d/id with its m, t,
                            p parameters, salt and hash; md5-crypt $1$,
                            sha256-crypt $5$ or sha512-crypt $6$ with a 22, 43
                            or 86 character hash; passlib $scrypt$ with ln, r,
                            p, salt and hash) or a three-segment JWT whose
                            header is base64url JSON opening with an "alg",
                            "typ", "kid" or "cty" member (eyJhbGciOi,
                            eyJ0eXAiOi, eyJraWQiOi or eyJjdHkiOi). A value that
                            merely starts with '$2' or 'eyJ', such as
                            eyJohnathan.doe.x, is not refused. Best effort, not
                            a guarantee; see the provider obligation in the
                            README.
                          anyOf:
                            - pattern: ^\$2[abxy]?\$[0-9]{2}\$[./A-Za-z0-9]{53}$
                            - pattern: >-
                                ^\$argon2(?:id|i|d)\$(?:v=[0-9]{1,4}\$)?m=[0-9]{1,10},t=[0-9]{1,10},p=[0-9]{1,3}\$[A-Za-z0-9+/]{8,}\$[A-Za-z0-9+/]{16,}$
                            - pattern: >-
                                ^\$[156]\$(?:rounds=[0-9]{1,9}\$)?[./A-Za-z0-9]{1,16}\$(?:[./A-Za-z0-9]{22}|[./A-Za-z0-9]{43}|[./A-Za-z0-9]{86})$
                            - pattern: >-
                                ^\$scrypt\$ln=[0-9]{1,2},r=[0-9]{1,3},p=[0-9]{1,3}\$[A-Za-z0-9+/.]{8,}\$[A-Za-z0-9+/.]{16,}$
                            - pattern: >-
                                ^eyJ(?:hbGciOi|0eXAiOi|raWQiOi|jdHkiOi)[A-Za-z0-9_-]*\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*$
                  status:
                    enum:
                      - complete
                      - partial
                      - pending
                    description: >-
                      Processing state, separate from evidence coverage.
                      complete: final; nothing is still running, but
                      unsupported, failed or unanswered lanes remain in
                      incomplete_sources. partial: a recommendation exists and
                      evidence is incomplete; assessment_url identifies
                      continuing work when present. pending: no recommendation
                      yet; poll or wait for the webhook. Finished processing
                      does not mean all sources answered.
                  recommendation:
                    enum:
                      - allow
                      - step_up
                      - review
                    description: Advisory only. The provider decides and enforces.
                  confidence:
                    enum:
                      - low
                      - medium
                      - high
                      - unavailable
                    description: >-
                      Evidence coverage: how much of the planned source evidence
                      gave a definite answer. This is not confidence that an
                      identity is genuine, agreement between identifiers, a risk
                      score or a probability. unavailable means no usable
                      evidence answered; a terminal uncovered assessment can
                      have this value and recommend review.
                  risk:
                    type: object
                    additionalProperties: false
                    required:
                      - score
                      - band
                      - recommendation
                      - confidence
                      - policy_version
                      - policy_basis
                      - reasons
                      - coverage
                    description: >-
                      the one risk decision for this assessment. score is 0
                      (safe) to 100 (risky), set by the reasons that fired under
                      a hand-set, versioned policy. The policy's weights are not
                      published: each reason carries its direction and a coarse
                      impact band instead. Every served answer with a
                      recommendation carries it, and there the top-level
                      recommendation equals risk.recommendation. block is true
                      from the workspace's block threshold (block_threshold),
                      off by default. It names no source or provider.
                    properties:
                      score:
                        type: integer
                        minimum: 0
                        maximum: 100
                      band:
                        enum:
                          - low
                          - medium
                          - high
                          - critical
                        description: low 0-29, medium 30-59, high 60-84, critical 85-100.
                      recommendation:
                        enum:
                          - allow
                          - step_up
                          - review
                        description: Advisory only. The provider decides and enforces.
                      block:
                        type: boolean
                        description: >-
                          true when the workspace's block threshold is set and
                          score reached it. A provider hook can deny the account
                          creation on it; the provider decides and enforces. It
                          does not change recommendation. It is false while
                          blocking is off, the default, and a body from before
                          the flag existed omits it: read absent as false.
                      block_threshold:
                        type: integer
                        minimum: 1
                        maximum: 100
                        description: >-
                          The block threshold this answer used: block is true
                          exactly when score is at least this value. Absent
                          while blocking is off. NoResponse sets it per
                          workspace on request, at or above the review
                          threshold.
                      step_up_threshold:
                        type: integer
                        minimum: 1
                        maximum: 100
                        description: >-
                          The score at which this answer's flow starts to
                          recommend step_up. Absent from an answer stored before
                          it was recorded.
                      review_threshold:
                        type: integer
                        minimum: 1
                        maximum: 100
                        description: >-
                          The score at which this answer's flow starts to
                          recommend review. An answer nothing answered
                          recommends review below it, with confidence
                          unavailable. Absent from an answer stored before it
                          was recorded.
                      confidence:
                        enum:
                          - low
                          - medium
                          - high
                        description: >-
                          How much of the planned evidence answered; it says
                          nothing about risk.
                      policy_version:
                        type: string
                        minLength: 1
                        maxLength: 64
                        pattern: ^[a-z0-9][a-z0-9._-]{0,63}(\+t[1-9][0-9]{0,8})?$
                        description: >-
                          Version of the hand-authored heuristic policy that
                          produced the recommendation, for example
                          'risk-2026-10.7'. A workspace threshold override adds
                          a +t<N> suffix, e.g. 'risk-2026-10.7+t3'.
                        not:
                          description: >-
                            A NUL or line feed anywhere, refused with not beside
                            anchored patterns. The parser refuses NUL in every
                            request string. This guard also closes engines where
                            $ accepts a final line feed.
                          pattern: '[\x00\n]'
                      policy_basis:
                        const: heuristic_unvalidated
                      reasons:
                        type: array
                        maxItems: 32
                        description: >-
                          Every reason that fired: risk-raising reasons first,
                          then neutral, then risk-lowering, each strongest
                          impact band first and then by code. The policy's
                          numeric weights are kept private, so a reason carries
                          only its direction and impact band.
                        items:
                          type: object
                          additionalProperties: false
                          description: >-
                            One reason that fired. direction is whether it
                            raises or lowers the score, or is neutral
                            (informational, it moves nothing). impact is a
                            coarse band of how much it moves the score: none for
                            a neutral reason, otherwise low, medium or high.
                          required:
                            - code
                            - direction
                            - impact
                          properties:
                            code:
                              enum:
                                - no_digital_footprint
                                - voip_number
                                - disposable_email
                                - new_email
                                - no_email_matches
                                - spam_reports
                                - fraud_flag
                                - identity_mismatch
                                - country_mismatch
                                - proxy_ip
                                - seen_before
                                - shared_ip
                                - many_recent_accounts
                                - established_accounts
                                - aged_identity
                                - breach_name_match
                                - breach_cooccurrence
                                - breach_name_mismatch
                                - breach_phone_mismatch
                                - recent_password_exposure
                                - credential_list_exposure
                                - abuse_ecosystem_member
                                - no_breach_history
                                - automation_fast_submit
                                - client_clock_skew
                                - bot_or_automation
                                - auth_email_verified
                                - auth_phone_verified
                                - auth_mfa_recent
                                - auth_new_session
                                - auth_new_account
                                - auth_impersonated
                                - context_timezone_mismatch
                                - context_locale_mismatch
                                - context_line_country_mismatch
                                - prior_abuse_link
                                - test_scenario
                                - shared_api_key
                                - list_match
                                - young_email_domain
                                - email_domain_no_mx
                                - email_domain_nonexistent
                                - google_account_missing
                                - google_empty_account
                                - google_active_profile
                                - google_aged_account
                                - google_name_match
                                - google_name_mismatch
                                - google_country_match
                                - google_country_mismatch
                                - forum_sanctioned
                                - prior_payment_abuse
                                - ip_history_match
                                - identity_attribute_conflict
                                - impossible_identity_age
                                - breach_shared_ip
                                - nationality_mismatch
                                - minor_identity
                                - reported_account_abuse
                                - breach_city_match
                                - breach_city_mismatch
                              description: >-
                                A risk reason from the reviewed list. new_email
                                is retained only for historical decisions: it
                                never measured email age and is no longer
                                emitted. no_email_matches is neutral and
                                requires explicit, complete no-match answers
                                from supported account and breach searches for
                                the email; unsupported, failed, partial or
                                running searches cannot establish it.
                                no_breach_history is neutral and records only a
                                complete email breach search with no matches,
                                independently of account coverage.
                                no_digital_footprint keeps its existing weight
                                for confirmed absence across the searched
                                account and breach families; no extra age proxy
                                is added. old_breach_history and
                                consistent_identity were replaced by the breach
                                codes (aged_identity, breach_name_match,
                                breach_cooccurrence and the mismatches) and are
                                refused. young_email_domain, email_domain_no_mx
                                and email_domain_nonexistent describe the
                                email's domain (the deferred RDAP registration
                                age and the request-time mail answer:
                                email_domain_no_mx means a null MX, or neither
                                an MX nor an address record); a lookup that
                                failed writes nothing and fires none of them.
                                forum_sanctioned and prior_payment_abuse
                                describe the conduct the email's or username's
                                breach rows record: a forum ban, warning or
                                infraction, and recorded chargebacks or many
                                declined payments. ip_history_match means the
                                signup IP is one the email's or username's own
                                breach rows used, from a typed address that is
                                no proxy or hosting network, once the address's
                                own breach search found fewer than twenty
                                people. identity_attribute_conflict means
                                independent breach records and profiles disagree
                                on the birth date, gender or nationality, or the
                                breach gender differs from the submitted first
                                name's usual one; impossible_identity_age means
                                the email address appears in breach records from
                                before, or soon after, the birth date they
                                report, or that birth date is 110 or more years
                                ago; nationality_mismatch means the breach
                                nationality's country differs from three or more
                                of the IP, phone, timezone and locale countries;
                                minor_identity flags a breach birth date under
                                18 years ago. breach_city_match means two or
                                more breach tables give the city of the IP, from
                                a typed address that is no proxy, hosting or
                                mobile network. breach_city_mismatch is neutral:
                                the breach records give one city and the IP
                                country, and the IP is in a different city,
                                under the same conditions; a missing IP city or
                                a name that cannot be compared makes no claim.
                                breach_shared_ip means the signup IP's own
                                breach records hold five or more different
                                people besides the signup, from a typed address
                                that is no proxy or hosting network; one
                                record's emails and usernames are one person.
                                Mobile carrier addresses are not yet detected.
                                test_scenario appears only on an assessment made
                                with a test key (nrk_test_), which the
                                deterministic simulator answers: its impact is
                                the scenario the magic email or phone chose, and
                                none for any other identifier. A live assessment
                                never carries it. shared_api_key is an account
                                reason, never an assessment one: it appears only
                                in the risk of GET /v1/accounts/{account_id} and
                                the account an assessment carries, when a key
                                your account creation gate issued to the account
                                (issued_credential.sha256) was used from many IP
                                addresses or countries within 24 hours (POST
                                /v1/keys/usage). list_match is an account reason
                                too: one of the account's admitted assessments
                                sent an email, or an email of a domain, on the
                                environment's list (GET
                                /v1/workspaces/{workspace_id}/lists/{environment}).
                                It names the entry in list_entry_id; it raises
                                for a block entry and lowers for an allow entry,
                                and it decides the account whatever the score,
                                which it leaves unchanged.
                                reported_account_abuse is an account-only,
                                tenant-local assertion from a known abuse
                                outcome; it is not independently corroborated
                                evidence and is withdrawn by a correction of
                                that report.
                            direction:
                              enum:
                                - raises
                                - lowers
                                - neutral
                            impact:
                              enum:
                                - none
                                - low
                                - medium
                                - high
                            identifier:
                              enum:
                                - email
                                - username
                                - phone
                                - name
                                - ip
                                - context
                              description: >-
                                The submitted identifier or bounded client
                                context a reason concerns; absent when it
                                concerns the whole assessment. Context is a
                                claimed, untrusted hint and never a device
                                fingerprint.
                            list_entry_id:
                              type: string
                              pattern: ^lst_[0-7][0-9A-HJKMNP-TV-Z]{25}$
                              description: >-
                                The list entry a list_match reason applied. No
                                other reason carries it.
                      summary:
                        type: object
                        additionalProperties: false
                        properties:
                          phone:
                            type: object
                            additionalProperties: false
                            properties:
                              line_type:
                                enum:
                                  - mobile
                                  - voip
                                  - landline
                                  - toll_free
                                  - other
                              country:
                                type: string
                                pattern: ^[A-Z]{2}$
                                not:
                                  pattern: \n
                              report_count:
                                type: integer
                                minimum: 0
                                description: >-
                                  Highest report count any source gave for the
                                  number.
                              carrier:
                                type: string
                                minLength: 1
                                maxLength: 128
                                description: >-
                                  Carrier-network metadata from privately
                                  weighted sources; not upstream provider
                                  attribution.
                          email:
                            type: object
                            additionalProperties: false
                            properties:
                              disposable:
                                type: boolean
                              accounts_found:
                                type: integer
                                minimum: 0
                                description: Accounts found for the email.
                              breach:
                                type: object
                                additionalProperties: false
                                required:
                                  - found
                                description: >-
                                  Breach facts for the email. Replaces the
                                  boolean breached.
                                properties:
                                  found:
                                    type: boolean
                                  breach_count:
                                    type: integer
                                    minimum: 0
                                    description: >-
                                      Distinct breach tables the value appears
                                      in.
                                  first_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                    description: Year of the oldest dated table.
                                  last_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                    description: Year of the newest dated table.
                                  exposed:
                                    type: array
                                    maxItems: 11
                                    items:
                                      enum:
                                        - email
                                        - username
                                        - name
                                        - password
                                        - password_hash
                                        - phone
                                        - address
                                        - dob
                                        - ip
                                        - payment
                                        - security_qa
                                      description: >-
                                        A kind of data a breach table held next
                                        to the identifier. password means a
                                        plaintext password was present;
                                        NoResponse never stores it and never
                                        says what it was. password_hash means a
                                        hash, salt or token was present. A
                                        value, never: the schema has no member
                                        for one.
                                    description: >-
                                      The union of data kinds the matching
                                      tables held, never the values.
                                  in_credential_lists:
                                    type: boolean
                                    description: >-
                                      The value is in a credential_list or
                                      stealer_log table.
                                  recent_password_exposure:
                                    type: boolean
                                    description: >-
                                      A plaintext password sat next to the value
                                      in a table dated two years ago or less, or
                                      the value is in a stealer_log table.
                                  truncated:
                                    type: boolean
                                allOf:
                                  - if:
                                      properties:
                                        truncated:
                                          const: true
                                      required:
                                        - truncated
                                    then:
                                      properties:
                                        found:
                                          const: true
                                  - if:
                                      properties:
                                        found:
                                          const: false
                                      required:
                                        - found
                                    then:
                                      not:
                                        anyOf:
                                          - required:
                                              - first_year
                                          - required:
                                              - last_year
                                          - required:
                                              - exposed
                          username:
                            type: object
                            additionalProperties: false
                            properties:
                              accounts_found:
                                type: integer
                                minimum: 0
                                description: Accounts found for the username.
                              breach:
                                type: object
                                additionalProperties: false
                                required:
                                  - found
                                description: Breach facts for the username.
                                properties:
                                  found:
                                    type: boolean
                                  breach_count:
                                    type: integer
                                    minimum: 0
                                    description: >-
                                      Distinct breach tables the value appears
                                      in.
                                  first_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                    description: Year of the oldest dated table.
                                  last_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                    description: Year of the newest dated table.
                                  exposed:
                                    type: array
                                    maxItems: 11
                                    items:
                                      enum:
                                        - email
                                        - username
                                        - name
                                        - password
                                        - password_hash
                                        - phone
                                        - address
                                        - dob
                                        - ip
                                        - payment
                                        - security_qa
                                      description: >-
                                        A kind of data a breach table held next
                                        to the identifier. password means a
                                        plaintext password was present;
                                        NoResponse never stores it and never
                                        says what it was. password_hash means a
                                        hash, salt or token was present. A
                                        value, never: the schema has no member
                                        for one.
                                    description: >-
                                      The union of data kinds the matching
                                      tables held, never the values.
                                  in_credential_lists:
                                    type: boolean
                                    description: >-
                                      The value is in a credential_list or
                                      stealer_log table.
                                  recent_password_exposure:
                                    type: boolean
                                    description: >-
                                      A plaintext password sat next to the value
                                      in a table dated two years ago or less, or
                                      the value is in a stealer_log table.
                                  truncated:
                                    type: boolean
                                allOf:
                                  - if:
                                      properties:
                                        truncated:
                                          const: true
                                      required:
                                        - truncated
                                    then:
                                      properties:
                                        found:
                                          const: true
                                  - if:
                                      properties:
                                        found:
                                          const: false
                                      required:
                                        - found
                                    then:
                                      not:
                                        anyOf:
                                          - required:
                                              - first_year
                                          - required:
                                              - last_year
                                          - required:
                                              - exposed
                          ip:
                            type: object
                            additionalProperties: false
                            description: >-
                              Facts about the submitted IP from the offline
                              database and this workspace's own recent
                              assessments. Every member is optional; absent
                              makes no claim.
                            properties:
                              country:
                                type: string
                                pattern: ^[A-Z]{2}$
                                not:
                                  description: >-
                                    A NUL or line feed anywhere, refused with
                                    not beside anchored patterns. The parser
                                    refuses NUL in every request string. This
                                    guard also closes engines where $ accepts a
                                    final line feed.
                                  pattern: '[\x00\n]'
                                description: ISO 3166-1 alpha-2 country of the address.
                              type:
                                enum:
                                  - residential
                                  - hosting
                                  - vpn
                                  - proxy
                                  - tor
                                  - mobile
                                  - unknown
                                description: The address's network type.
                              asn:
                                type: integer
                                minimum: 1
                                maximum: 4294967295
                                description: >-
                                  Autonomous system number of the network that
                                  announces the address, from the offline
                                  database. Absent when unknown.
                              seen_in_workspace:
                                type: integer
                                minimum: 0
                                description: >-
                                  Assessments in this workspace with the same IP
                                  in the last 24 hours, this one included. A
                                  count only.
                          consistency:
                            type: object
                            additionalProperties: false
                            description: >-
                              Cross-identifier agreement, computed from facts
                              only. Every member is optional; absent makes no
                              claim.
                            properties:
                              name:
                                enum:
                                  - match
                                  - partial
                                  - mismatch
                                  - unknown
                                description: >-
                                  The submitted name against breach names and
                                  caller-ID names.
                              phone:
                                enum:
                                  - match
                                  - partial
                                  - mismatch
                                  - unknown
                                description: >-
                                  The submitted phone against numbers found next
                                  to the email in breach records.
                              ip:
                                enum:
                                  - match
                                  - partial
                                  - mismatch
                                  - unknown
                                description: >-
                                  The submitted IP against IPs found next to the
                                  email or username in breach records.
                              country:
                                enum:
                                  - consistent
                                  - mismatch
                                  - unknown
                                description: >-
                                  IP country, phone country, breach countries
                                  and policy_context.region together. When the
                                  breach records give a country, the timezone
                                  and locale countries count too. The IP country
                                  of a proxy or hosting network does not count.
                          footprint:
                            type: object
                            additionalProperties: false
                            description: >-
                              How long and how widely the signup's email and
                              username have existed, and how far independent
                              sources agree on the person behind them, in years
                              and counts only. families are the kinds of
                              evidence that found either identifier. Omitted
                              when nothing found them: a footprint lookup that
                              failed makes no claim, and absence is
                              no_digital_footprint's to state.
                            required:
                              - families
                            properties:
                              email:
                                type: object
                                additionalProperties: false
                                description: >-
                                  One identifier's dated footprint across every
                                  source: the first and last year any event was
                                  seen, the years between them, the latest year
                                  a source dated activity (omitted when none
                                  did), how many distinct sites and which kinds
                                  of evidence saw it.
                                required:
                                  - first_seen_year
                                  - last_seen_year
                                  - span_years
                                  - sites
                                  - families
                                properties:
                                  first_seen_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                  last_seen_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                  span_years:
                                    type: integer
                                    minimum: 0
                                  last_active_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                  sites:
                                    type: integer
                                    minimum: 1
                                  families:
                                    type: array
                                    uniqueItems: true
                                    items:
                                      enum:
                                        - account_presence
                                        - auth_provider
                                        - breach
                                        - breach_abuse
                                        - code_hosting
                                      description: >-
                                        The source-neutral kind of evidence:
                                        account_presence (an account found on a
                                        site), auth_provider (the account at
                                        your auth provider), breach (breach and
                                        credential tables), breach_abuse (abuse
                                        and fraud communities' tables) and
                                        code_hosting (a code hosting profile).
                              username:
                                type: object
                                additionalProperties: false
                                description: >-
                                  One identifier's dated footprint across every
                                  source: the first and last year any event was
                                  seen, the years between them, the latest year
                                  a source dated activity (omitted when none
                                  did), how many distinct sites and which kinds
                                  of evidence saw it.
                                required:
                                  - first_seen_year
                                  - last_seen_year
                                  - span_years
                                  - sites
                                  - families
                                properties:
                                  first_seen_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                  last_seen_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                  span_years:
                                    type: integer
                                    minimum: 0
                                  last_active_year:
                                    type: integer
                                    minimum: 1970
                                    maximum: 2100
                                  sites:
                                    type: integer
                                    minimum: 1
                                  families:
                                    type: array
                                    uniqueItems: true
                                    items:
                                      enum:
                                        - account_presence
                                        - auth_provider
                                        - breach
                                        - breach_abuse
                                        - code_hosting
                                      description: >-
                                        The source-neutral kind of evidence:
                                        account_presence (an account found on a
                                        site), auth_provider (the account at
                                        your auth provider), breach (breach and
                                        credential tables), breach_abuse (abuse
                                        and fraud communities' tables) and
                                        code_hosting (a code hosting profile).
                              families:
                                type: array
                                uniqueItems: true
                                items:
                                  enum:
                                    - account_presence
                                    - auth_provider
                                    - breach
                                    - breach_abuse
                                    - code_hosting
                                  description: >-
                                    The source-neutral kind of evidence:
                                    account_presence (an account found on a
                                    site), auth_provider (the account at your
                                    auth provider), breach (breach and
                                    credential tables), breach_abuse (abuse and
                                    fraud communities' tables) and code_hosting
                                    (a code hosting profile).
                              coherence:
                                type: object
                                additionalProperties: false
                                minProperties: 1
                                properties:
                                  birth_date:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  gender:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  nationality:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  country:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  city:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  zip:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  name:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  company:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  website:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                                  social:
                                    type: object
                                    additionalProperties: false
                                    description: >-
                                      How far independent sources agree on one
                                      attribute: values is the number of
                                      distinct values reported, support the
                                      tables and profiles reporting any, and
                                      agreement match (one value), partial (the
                                      most reported value holds more than half
                                      the support) or mismatch. The values
                                      themselves are not served.
                                    required:
                                      - agreement
                                      - values
                                      - support
                                    properties:
                                      agreement:
                                        enum:
                                          - match
                                          - partial
                                          - mismatch
                                      values:
                                        type: integer
                                        minimum: 1
                                      support:
                                        type: integer
                                        minimum: 1
                        description: >-
                          A few typed facts per identifier. Every fact is
                          optional: absent means the evidence did not answer and
                          makes no claim, while false or 0 is a definite answer.
                          Lanes that do not exist yet leave their members
                          absent.
                      coverage:
                        type: object
                        additionalProperties: false
                        required:
                          - answered
                          - failed
                          - pending
                        description: >-
                          Counts of planned source-identifier pairs by evidence
                          outcome, deduplicated across signals and incomplete
                          entries. These counts do not measure identity
                          agreement or prove that processing is still running. A
                          lane that was not searched is not an answered source.
                        properties:
                          answered:
                            type: integer
                            minimum: 0
                            description: >-
                              Source-identifier pairs that gave a definite found
                              or not_found answer.
                          failed:
                            type: integer
                            minimum: 0
                            description: >-
                              Source-identifier pairs that could not answer,
                              including unsupported coverage markers and source
                              failures. Read detailed signals to distinguish Not
                              covered from Failed.
                          pending:
                            type: integer
                            minimum: 0
                            description: >-
                              Source-identifier pairs with deferred or timed_out
                              evidence. A terminal timeout can remain here after
                              processing finishes; use assessment status and
                              continuation metadata to determine whether work is
                              still running.
                      details:
                        type: object
                        additionalProperties: false
                        description: >-
                          Detailed view only (response_mode=detailed, which
                          needs the detailed scope); a standard answer never
                          carries it. Merged observations: no provider, source,
                          origin, raw breach record, value or score.
                        properties:
                          phone_names:
                            type: array
                            maxItems: 32
                            items:
                              type: object
                              additionalProperties: false
                              required:
                                - value
                                - seen_by
                              properties:
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 128
                                seen_by:
                                  type: integer
                                  minimum: 1
                          breaches:
                            type: array
                            maxItems: 100
                            items:
                              type: object
                              additionalProperties: false
                              required:
                                - name
                                - kind
                                - matched_on
                              description: >-
                                One breach table that matched, detailed view
                                only. No member carries a record, value,
                                password or hash.
                              properties:
                                name:
                                  type: string
                                  minLength: 1
                                  maxLength: 128
                                  not:
                                    description: >-
                                      A NUL or line feed anywhere, refused with
                                      not beside anchored patterns. The parser
                                      refuses NUL in every request string. This
                                      guard also closes engines where $ accepts
                                      a final line feed.
                                    pattern: '[\x00\n]'
                                domain:
                                  type: string
                                  minLength: 3
                                  maxLength: 253
                                  pattern: >-
                                    ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$
                                  not:
                                    description: >-
                                      A NUL or line feed anywhere, refused with
                                      not beside anchored patterns. The parser
                                      refuses NUL in every request string. This
                                      guard also closes engines where $ accepts
                                      a final line feed.
                                    pattern: '[\x00\n]'
                                  description: >-
                                    The breached site's domain, lower case.
                                    Absent when the table has none (a credential
                                    list, for example).
                                category:
                                  type: string
                                  pattern: ^[a-z0-9_]{1,64}$
                                  not:
                                    description: >-
                                      A NUL or line feed anywhere, refused with
                                      not beside anchored patterns. The parser
                                      refuses NUL in every request string. This
                                      guard also closes engines where $ accepts
                                      a final line feed.
                                    pattern: '[\x00\n]'
                                  description: >-
                                    The table's category from its name, lower
                                    case (social, gaming, combolist...).
                                kind:
                                  enum:
                                    - site_breach
                                    - credential_list
                                    - stealer_log
                                    - scrape
                                    - hacking_forum
                                    - abuse_service
                                    - darkweb_site
                                  description: >-
                                    Who is in the table: site_breach, a site's
                                    own users; credential_list, a combolist or
                                    compilation; stealer_log, malware or botnet
                                    victims; scrape; hacking_forum, a criminal
                                    hacking, cracking or carding community;
                                    abuse_service, the customers of
                                    DDoS-for-hire, account generators, dump or
                                    card shops, darknet markets, stalkerware or
                                    breach-lookup services; darkweb_site, an
                                    onion site of unknown purpose.
                                year:
                                  type: integer
                                  minimum: 1970
                                  maximum: 2100
                                  description: A breach table's date year.
                                month:
                                  type: integer
                                  minimum: 1
                                  maximum: 12
                                  description: Absent when only the year is known.
                                matched_on:
                                  enum:
                                    - email
                                    - username
                                    - ip
                                  description: >-
                                    The submitted email or username whose own
                                    search matched the table. The phone is never
                                    searched. A submitted full name is searched
                                    as well, and what that search finds feeds
                                    the identity's facts and reasons rather than
                                    this list.
                                exposed:
                                  type: array
                                  maxItems: 11
                                  items:
                                    enum:
                                      - email
                                      - username
                                      - name
                                      - password
                                      - password_hash
                                      - phone
                                      - address
                                      - dob
                                      - ip
                                      - payment
                                      - security_qa
                                    description: >-
                                      A kind of data a breach table held next to
                                      the identifier. password means a plaintext
                                      password was present; NoResponse never
                                      stores it and never says what it was.
                                      password_hash means a hash, salt or token
                                      was present. A value, never: the schema
                                      has no member for one.
                                conduct:
                                  type: array
                                  minItems: 1
                                  maxItems: 3
                                  uniqueItems: true
                                  items:
                                    enum:
                                      - chargeback
                                      - declined_payment
                                      - forum_sanction
                                    description: >-
                                      What a breach table's rows record against
                                      the identifier: chargeback, one or more
                                      chargebacks; declined_payment, one or more
                                      declined payments; forum_sanction, a forum
                                      ban, warning or infraction. A category and
                                      not a value: the schema has no member for
                                      one.
                                  description: >-
                                    What this table's rows record against the
                                    matched email or username: the tables behind
                                    the forum_sanctioned and prior_payment_abuse
                                    reasons. Absent when the rows record none,
                                    for a table matched on an IP address, and
                                    from an answer stored before it was
                                    recorded.
                            description: >-
                              The matching breach tables, newest first, at most
                              100.
                          breach_names:
                            type: array
                            maxItems: 32
                            description: >-
                              Names found next to the identifiers in breach
                              records, merged, with the number of distinct
                              tables each was seen in and the sites of those
                              tables.
                            items:
                              type: object
                              additionalProperties: false
                              required:
                                - value
                                - seen_in
                              properties:
                                value:
                                  type: string
                                  minLength: 1
                                  maxLength: 128
                                seen_in:
                                  type: integer
                                  minimum: 1
                                sites:
                                  type: array
                                  minItems: 1
                                  maxItems: 32
                                  uniqueItems: true
                                  items:
                                    type: string
                                    minLength: 3
                                    maxLength: 253
                                    pattern: >-
                                      ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$
                                    not:
                                      description: >-
                                        A NUL or line feed anywhere, refused
                                        with not beside anchored patterns. The
                                        parser refuses NUL in every request
                                        string. This guard also closes engines
                                        where $ accepts a final line feed.
                                      pattern: '[\x00\n]'
                                  description: >-
                                    The domains of the breached sites whose
                                    tables hold the name, lower case, each once,
                                    newest breach first, at most 32: the domain
                                    values of breaches[]. Covers the email's and
                                    the username's tables together. Absent when
                                    none of the tables has a site.
                                unsited:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    How many of the tables that hold the name
                                    have no site, such as a credential list or a
                                    stealer log. Absent when none.
                          events:
                            type: array
                            maxItems: 300
                            description: >-
                              The identity's dated footprint events, newest
                              first, at most 300: the year and month, what
                              happened (created, last_active, breached), the
                              site, its category, the kind of evidence and the
                              identifier it belongs to. No breach value: dates
                              are coarsened to the month.
                            items:
                              type: object
                              additionalProperties: false
                              required:
                                - year
                                - kind
                                - site
                                - category
                                - family
                                - identifier
                              properties:
                                year:
                                  type: integer
                                  minimum: 1970
                                  maximum: 2100
                                month:
                                  type: integer
                                  minimum: 1
                                  maximum: 12
                                kind:
                                  enum:
                                    - created
                                    - last_active
                                    - breached
                                site:
                                  type: string
                                  minLength: 1
                                  maxLength: 128
                                  not:
                                    pattern: '[\x00-\x1f\x7f]'
                                category:
                                  type: string
                                  pattern: ^[a-z0-9_]{1,64}$
                                family:
                                  enum:
                                    - account_presence
                                    - auth_provider
                                    - breach
                                    - breach_abuse
                                    - code_hosting
                                  description: >-
                                    The source-neutral kind of evidence:
                                    account_presence (an account found on a
                                    site), auth_provider (the account at your
                                    auth provider), breach (breach and
                                    credential tables), breach_abuse (abuse and
                                    fraud communities' tables) and code_hosting
                                    (a code hosting profile).
                                identifier:
                                  enum:
                                    - email
                                    - username
                          accounts:
                            type: array
                            maxItems: 64
                            description: >-
                              Every online-account search of the email or
                              username: the platform, what the search came to
                              and, for an account found, what the platform
                              returned beside it. Found first, then not found,
                              then searches that failed or are still running,
                              each by platform name; at most 64. A failed or
                              running search keeps its own outcome and is not
                              reported as not_found.
                            items:
                              type: object
                              additionalProperties: false
                              required:
                                - name
                                - domain
                                - identifier
                                - outcome
                              description: >-
                                One online-account search of the signup's email
                                or username, detailed view only. name and domain
                                name the platform searched, not a provider.
                                outcome is the search's signal outcome: found,
                                not_found, or a failure (blocked, unavailable,
                                inconclusive) with its reason; a failure is not
                                reported as not_found. The members after reason
                                are what the platform returned beside an account
                                it found, each absent when it did not say.
                              properties:
                                name:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                  description: >-
                                    The platform's name, such as Adobe or
                                    GitHub.
                                domain:
                                  type: string
                                  minLength: 3
                                  maxLength: 253
                                  pattern: >-
                                    ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$
                                  description: >-
                                    The platform's domain, lower case: the host
                                    its logo is fetched for.
                                identifier:
                                  enum:
                                    - email
                                    - username
                                  description: The identifier searched.
                                outcome:
                                  enum:
                                    - found
                                    - not_found
                                    - inconclusive
                                    - blocked
                                    - unavailable
                                  description: >-
                                    Per-signal outcome. A failure is never
                                    not_found: a source that timed out, was
                                    blocked or errored reports blocked,
                                    unavailable or inconclusive with a reason,
                                    and is listed in incomplete_sources.
                                reason:
                                  enum:
                                    - timed_out
                                    - rate_limited
                                    - blocked
                                    - source_error
                                    - unavailable
                                    - deferred
                                    - insufficient_evidence
                                  description: >-
                                    Why a signal or source did not produce a
                                    definite found/not_found. timed_out means
                                    the source missed the request deadline; a
                                    continuation may still settle it. deferred
                                    means the (source, identifier) pair is
                                    async-only and was not attempted on the
                                    synchronous path; a continuation settles it.
                                sign_in:
                                  type: array
                                  minItems: 1
                                  maxItems: 7
                                  uniqueItems: true
                                  items:
                                    enum:
                                      - password
                                      - google
                                      - facebook
                                      - apple
                                      - microsoft
                                      - sso
                                      - other
                                  description: >-
                                    How the account signs in, as the platform
                                    reports it, sorted: a password, a Google,
                                    Facebook, Apple or Microsoft account, the
                                    organisation's single sign-on, or another
                                    method.
                                email_verified:
                                  type: boolean
                                  description: >-
                                    Whether the platform says the account's
                                    email is verified.
                                blocked:
                                  type: boolean
                                  description: >-
                                    Whether the platform says the account is
                                    blocked or suspended.
                                account_type:
                                  enum:
                                    - personal
                                    - business
                                  description: >-
                                    personal, or business: an account a company
                                    or school manages.
                                has_avatar:
                                  type: boolean
                                  description: >-
                                    Whether the account has its own profile
                                    picture rather than the platform's default.
                                    The picture is not returned.
                                first_name_prefix:
                                  type: string
                                  minLength: 1
                                  maxLength: 32
                                  description: >-
                                    The first letters of the account holder's
                                    first name, as the platform shows them
                                    (Life360 shows two and hides the rest). It
                                    is evidence only: it does not change the
                                    score or the consistency results.
                          attribute_conflicts:
                            type: array
                            maxItems: 4
                            description: >-
                              What an identity_attribute_conflict reason
                              weighed: each attribute the records disagree on
                              and the sites reporting it. Absent when the reason
                              did not fire, and on an answer stored before
                              conflicts were recorded. No value is served.
                            items:
                              type: object
                              additionalProperties: false
                              required:
                                - attribute
                              properties:
                                attribute:
                                  enum:
                                    - birth_date
                                    - gender
                                    - nationality
                                    - name_gender
                                  description: >-
                                    name_gender is the records' gender against
                                    the submitted first name's usual one.
                                sites:
                                  type: array
                                  minItems: 1
                                  maxItems: 32
                                  uniqueItems: true
                                  items:
                                    type: string
                                    minLength: 3
                                    maxLength: 253
                                    pattern: >-
                                      ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$
                                    not:
                                      description: >-
                                        A NUL or line feed anywhere, refused
                                        with not beside anchored patterns. The
                                        parser refuses NUL in every request
                                        string. This guard also closes engines
                                        where $ accepts a final line feed.
                                      pattern: '[\x00\n]'
                                  description: >-
                                    The domains of the breached sites whose
                                    tables report the attribute, newest breach
                                    first, at most 32. Absent when none of the
                                    tables has a site.
                                unsited:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    How many of the tables reporting the
                                    attribute have no site, such as a credential
                                    list or a stealer log. Absent when none.
                    allOf:
                      - if:
                          properties:
                            block:
                              const: true
                          required:
                            - block
                        then:
                          required:
                            - block_threshold
                  signals:
                    type: array
                    maxItems: 256
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - type
                        - identifier
                        - outcome
                        - source_id
                        - freshness
                      properties:
                        type:
                          type: string
                          minLength: 1
                          maxLength: 64
                          pattern: ^[a-z][a-z0-9_]{0,63}$
                          description: >-
                            The producer emits only registered, active types
                            with a registered identifier kind and outcome.
                          not:
                            description: >-
                              A NUL or line feed anywhere, refused with not
                              beside anchored patterns. The parser refuses NUL
                              in every request string. This guard also closes
                              engines where $ accepts a final line feed.
                            pattern: '[\x00\n]'
                        identifier:
                          enum:
                            - email
                            - username
                            - phone
                            - ip
                          description: >-
                            Which submitted identifier a signal concerns. ip is
                            a selector of breach_exposure only.
                        outcome:
                          enum:
                            - found
                            - not_found
                            - inconclusive
                            - blocked
                            - unavailable
                          description: >-
                            Per-signal outcome. A failure is never not_found: a
                            source that timed out, was blocked or errored
                            reports blocked, unavailable or inconclusive with a
                            reason, and is listed in incomplete_sources.
                        source_id:
                          type: string
                          minLength: 1
                          maxLength: 64
                          pattern: ^[a-z0-9][a-z0-9_.-]{0,63}$
                          description: >-
                            Opaque, workspace-scoped projection of the source
                            that produced a signal. It remains stable for this
                            workspace while the projection key is unchanged, but
                            never identifies an upstream provider, feed, breach
                            table or source record.
                          not:
                            description: >-
                              A NUL or line feed anywhere, refused with not
                              beside anchored patterns. The parser refuses NUL
                              in every request string. This guard also closes
                              engines where $ accepts a final line feed.
                            pattern: '[\x00\n]'
                        reason:
                          enum:
                            - timed_out
                            - rate_limited
                            - blocked
                            - source_error
                            - unavailable
                            - deferred
                            - insufficient_evidence
                          description: >-
                            Why a signal or source did not produce a definite
                            found/not_found. timed_out means the source missed
                            the request deadline; a continuation may still
                            settle it. deferred means the (source, identifier)
                            pair is async-only and was not attempted on the
                            synchronous path; a continuation settles it.
                        evidence_ref:
                          type: string
                          pattern: ^evr_[0-9A-HJKMNP-TV-Z]{26}$
                          description: >-
                            Opaque pointer to evidence NoResponse holds for this
                            signal. It never encodes the evidence itself (no
                            breach value, credential or page body).
                          not:
                            description: >-
                              A NUL or line feed anywhere, refused with not
                              beside anchored patterns. The parser refuses NUL
                              in every request string. This guard also closes
                              engines where $ accepts a final line feed.
                            pattern: '[\x00\n]'
                        observed_at:
                          type: string
                          format: date-time
                          description: When the evidence was first observed.
                        last_checked_at:
                          type: string
                          format: date-time
                          description: >-
                            When the source was last queried for this
                            identifier.
                        freshness:
                          enum:
                            - fresh
                            - stale
                            - unknown
                          description: >-
                            Freshness class of the evidence behind a signal.
                            unknown whenever no evidence was obtained.
                        enrichment:
                          type: object
                          additionalProperties: false
                          required:
                            - fields
                          properties:
                            fields:
                              type: object
                              minProperties: 1
                              additionalProperties: false
                              properties:
                                phone:
                                  type: string
                                  maxLength: 8192
                                name:
                                  type: string
                                  maxLength: 8192
                                carrier:
                                  type: string
                                  maxLength: 8192
                                line_type:
                                  type: string
                                  maxLength: 8192
                                entity_type:
                                  type: string
                                  maxLength: 8192
                                country_code:
                                  type: string
                                  maxLength: 8192
                                country:
                                  type: string
                                  maxLength: 8192
                                state:
                                  type: string
                                  maxLength: 8192
                                city:
                                  type: string
                                  maxLength: 8192
                                location:
                                  type: string
                                  maxLength: 8192
                                national_format:
                                  type: string
                                  maxLength: 8192
                                job_title:
                                  type: string
                                  maxLength: 8192
                                company_name:
                                  type: string
                                  maxLength: 8192
                                email:
                                  type: string
                                  maxLength: 8192
                                website:
                                  type: string
                                  maxLength: 8192
                                first_call_at:
                                  type: string
                                  maxLength: 8192
                                last_call_at:
                                  type: string
                                  maxLength: 8192
                                matched_name:
                                  type: string
                                  maxLength: 8192
                                alternate_names:
                                  type: array
                                  maxItems: 1024
                                  items:
                                    type:
                                      - string
                                      - number
                                      - boolean
                                      - object
                                      - array
                                name_candidates:
                                  type: array
                                  maxItems: 1024
                                  items:
                                    type:
                                      - string
                                      - number
                                      - boolean
                                      - object
                                      - array
                                timezones:
                                  type: array
                                  maxItems: 1024
                                  items:
                                    type:
                                      - string
                                      - number
                                      - boolean
                                      - object
                                      - array
                                emails:
                                  type: array
                                  maxItems: 1024
                                  items:
                                    type:
                                      - string
                                      - number
                                      - boolean
                                      - object
                                      - array
                                websites:
                                  type: array
                                  maxItems: 1024
                                  items:
                                    type:
                                      - string
                                      - number
                                      - boolean
                                      - object
                                      - array
                                locations:
                                  type: array
                                  maxItems: 1024
                                  items:
                                    type:
                                      - string
                                      - number
                                      - boolean
                                      - object
                                      - array
                                social_profiles:
                                  type: array
                                  maxItems: 1024
                                  items:
                                    type:
                                      - string
                                      - number
                                      - boolean
                                      - object
                                      - array
                                report_count:
                                  type: integer
                                  minimum: 0
                                tag_count:
                                  type: integer
                                  minimum: 0
                                total_calls:
                                  type: integer
                                  minimum: 0
                                calls_60_days:
                                  type: integer
                                  minimum: 0
                                reports_60_days:
                                  type: integer
                                  minimum: 0
                                searches_60_days:
                                  type: integer
                                  minimum: 0
                                comment_count:
                                  type: integer
                                  minimum: 0
                                names_count:
                                  type: integer
                                  minimum: 0
                                spam_report_count:
                                  type: integer
                                  minimum: 0
                          description: >-
                            Only present for a found phone signal. Curated facts
                            about the number, not raw upstream documents and
                            never the provider's identity, scores or verdicts;
                            follows normal record retention/deletion.
                      allOf:
                        - if:
                            properties:
                              outcome:
                                const: found
                            required:
                              - outcome
                          then:
                            required:
                              - evidence_ref
                              - observed_at
                              - last_checked_at
                            properties:
                              freshness:
                                enum:
                                  - fresh
                                  - stale
                            not:
                              required:
                                - reason
                            description: >-
                              A definite presence: evidence exists, so its
                              freshness is known.
                        - if:
                            properties:
                              outcome:
                                const: not_found
                            required:
                              - outcome
                          then:
                            required:
                              - last_checked_at
                            not:
                              anyOf:
                                - required:
                                    - reason
                                - required:
                                    - evidence_ref
                            description: >-
                              A definite absence. Carries no failure reason: a
                              timeout, block or error is never encoded as
                              not_found.
                        - if:
                            properties:
                              outcome:
                                enum:
                                  - inconclusive
                                  - blocked
                                  - unavailable
                            required:
                              - outcome
                          then:
                            required:
                              - reason
                        - if:
                            properties:
                              outcome:
                                enum:
                                  - blocked
                                  - unavailable
                            required:
                              - outcome
                          then:
                            properties:
                              freshness:
                                const: unknown
                            not:
                              anyOf:
                                - required:
                                    - evidence_ref
                                - required:
                                    - observed_at
                            description: >-
                              No evidence was obtained, so there is nothing
                              observed and nothing to reference.
                        - if:
                            required:
                              - enrichment
                          then:
                            properties:
                              identifier:
                                const: phone
                              outcome:
                                const: found
                    description: >-
                      Detailed view only (response_mode=detailed, which needs
                      the detailed scope): a standard answer omits signals[],
                      and a detailed one always carries it, possibly empty. At
                      most one signal per (type, source_id, identifier).
                  incomplete_sources:
                    type: array
                    maxItems: 256
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - lane
                        - reason
                      description: >-
                        One lane with missing evidence and why. It can mean
                        unsupported input, source failure or unfinished work. It
                        names a lane, never a source: detailed signals
                        distinguish the source-identifier pairs behind it. A
                        lane is listed once. A complete assessment can retain
                        missing lanes; completion never establishes a successful
                        search. A lane that missed its deadline is timed_out,
                        never not_found.
                      properties:
                        lane:
                          enum:
                            - accounts
                            - phone
                            - breach
                            - domain
                            - ip
                          description: >-
                            An evidence lane: accounts (account presence for
                            email and username), phone, breach, domain (the
                            email domain's registration) and ip.
                        reason:
                          enum:
                            - timed_out
                            - rate_limited
                            - blocked
                            - source_error
                            - unavailable
                            - deferred
                          description: >-
                            Why a lane did not settle. insufficient_evidence is
                            a settled verdict (an inconclusive signal), never a
                            reason to list a lane as incomplete. deferred means
                            the lane is async-only and still running; a
                            continuation settles it. timed_out means the lane
                            missed its deadline.
                    description: >-
                      The lanes that did not settle, each listed once with a
                      reason; never a source. In a detailed view a lane is
                      listed exactly when one of its signals did not settle; a
                      standard view carries no signals to match.
                  policy_version:
                    type: string
                    minLength: 1
                    maxLength: 64
                    pattern: ^[a-z0-9][a-z0-9._-]{0,63}(\+t[1-9][0-9]{0,8})?$
                    description: >-
                      Version of the hand-authored heuristic policy that
                      produced the recommendation, for example 'risk-2026-10.7'.
                      A workspace threshold override adds a +t<N> suffix, e.g.
                      'risk-2026-10.7+t3'.
                    not:
                      description: >-
                        A NUL or line feed anywhere, refused with not beside
                        anchored patterns. The parser refuses NUL in every
                        request string. This guard also closes engines where $
                        accepts a final line feed.
                      pattern: '[\x00\n]'
                  policy_basis:
                    const: heuristic_unvalidated
                  assessment_version:
                    type: integer
                    minimum: 1
                    maximum: 1000
                    description: >-
                      Monotonic revision of this assessment. 1 on the
                      synchronous answer; each material change while the
                      assessment is served (an async continuation settling a
                      source, a change of recommendation, confidence or status)
                      increments it. Expiry does not increment it: an expired
                      assessment is gone, not revised, and the expiry webhook
                      carries the last served version.
                  created_at:
                    type: string
                    format: date-time
                    description: >-
                      When the assessment was created. Fixed for the life of the
                      assessment: every revision carries the same created_at.
                  updated_at:
                    type: string
                    format: date-time
                  expires_at:
                    type: string
                    format: date-time
                    description: >-
                      After this instant the assessment is no longer served: GET
                      /v1/assessments/{assessment_id} answers 404 and it leaves
                      the account history. It is created_at plus the workspace's
                      retention period at creation (default 365 days, at most
                      365). Fixed per record: a later async revision never
                      extends it, and a new assessment for the same account
                      never renews an older one. If the workspace later shortens
                      retention, the effective expiry becomes created_at +
                      min(retention at creation, current retention).
                  assessment_url:
                    type: string
                    maxLength: 64
                    pattern: ^/v1/assessments/asm_[0-9A-HJKMNP-TV-Z]{26}$
                    description: >-
                      Server-relative path of the authoritative assessment, GET
                      /v1/assessments/{assessment_id}.
                    not:
                      description: >-
                        A NUL or line feed anywhere, refused with not beside
                        anchored patterns. The parser refuses NUL in every
                        request string. This guard also closes engines where $
                        accepts a final line feed.
                      pattern: '[\x00\n]'
                  timing:
                    type: object
                    additionalProperties: false
                    required:
                      - deadline_ms
                      - elapsed_ms
                    properties:
                      deadline_ms:
                        type: integer
                        minimum: 50
                        maximum: 3000
                        description: >-
                          The budget the server applied to the synchronous
                          answer.
                      elapsed_ms:
                        type: integer
                        minimum: 0
                        maximum: 600000
                        description: >-
                          Server time from HTTP ingress to this revision of the
                          assessment.
                  auth_context:
                    type: object
                    additionalProperties: false
                    required:
                      - provider
                      - issuer
                      - verified
                      - transport
                    description: >-
                      The identity fields of the auth context the assessment was
                      made with, echoed for the workspace's own correlation: the
                      request's auth_context, or the one a hosted provider hook
                      (POST /hooks/{integration_id}) built, with transport
                      provider_hook and its hook_point. Present exactly when the
                      request carried an auth_context, and the same on every
                      revision of the assessment. Values are as the request or
                      the hook sent them; tokens, timestamps, roles and scopes
                      are not echoed, and the echo does not change the score.
                    properties:
                      provider:
                        type: string
                        pattern: ^[a-z0-9][a-z0-9._-]{1,31}$
                        description: The provider slug the context named.
                      issuer:
                        type: string
                        maxLength: 256
                        pattern: ^https://[^\s]+$
                        description: The issuer the context named.
                      subject:
                        type: string
                        maxLength: 256
                        pattern: ^[A-Za-z0-9._:@/|+=~-]{1,256}$
                        description: >-
                          The subject the context named; absent when it named
                          none (a pre_registration hook).
                      session_id:
                        type: string
                        maxLength: 256
                        pattern: ^[A-Za-z0-9._:@/|+=~-]{1,256}$
                        description: >-
                          The session identifier the context named, when it
                          named one.
                      organization_id:
                        type: string
                        maxLength: 256
                        pattern: ^[A-Za-z0-9._:@/|+=~-]{1,256}$
                        description: >-
                          The organization identifier the context named, when it
                          named one.
                      verified:
                        type: boolean
                        description: >-
                          The verified flag the context carried. A provider_hook
                          context is always false.
                      transport:
                        type: string
                        enum:
                          - backend
                          - browser
                          - provider_hook
                        description: >-
                          Where the context was derived: backend (also when the
                          request named no transport), browser, or provider_hook
                          for a hosted provider hook.
                      hook_point:
                        type: string
                        enum:
                          - pre_registration
                          - post_registration
                          - pre_login
                          - post_login
                          - token_issuance
                        description: >-
                          The provider event a provider_hook context was sent
                          for; absent for any other transport.
                    if:
                      properties:
                        transport:
                          const: provider_hook
                    then:
                      required:
                        - hook_point
                      properties:
                        verified:
                          const: false
                    else:
                      not:
                        required:
                          - hook_point
                allOf:
                  - if:
                      properties:
                        status:
                          const: complete
                      required:
                        - status
                    then:
                      required:
                        - recommendation
                      properties:
                        incomplete_sources:
                          items:
                            properties:
                              reason:
                                not:
                                  const: deferred
                          description: >-
                            A complete assessment may list lanes that failed or
                            timed out, never one still running.
                      not:
                        required:
                          - assessment_url
                  - if:
                      properties:
                        status:
                          const: partial
                      required:
                        - status
                    then:
                      required:
                        - recommendation
                      properties:
                        incomplete_sources:
                          minItems: 1
                  - if:
                      properties:
                        status:
                          const: pending
                      required:
                        - status
                    then:
                      required:
                        - assessment_url
                      not:
                        anyOf:
                          - required:
                              - recommendation
                          - required:
                              - risk
                      properties:
                        confidence:
                          const: unavailable
                        incomplete_sources:
                          minItems: 1
                  - if:
                      properties:
                        confidence:
                          const: unavailable
                      required:
                        - confidence
                    then:
                      properties:
                        recommendation:
                          const: review
                  - if:
                      properties:
                        risk:
                          required:
                            - details
                      required:
                        - risk
                    then:
                      required:
                        - signals
              first_decision:
                type: string
                enum:
                  - allow
                  - step_up
                  - review
                  - block
                description: >-
                  The decision of the assessment's first answer (the revision
                  revision first returns and POST /v1/assessments/aggregate
                  counts): block when its stored risk.block is true, otherwise
                  its recommendation. Absent when the first answer had no
                  decision yet. With revision first it is the item's own
                  decision.
              matched_identifier:
                title: Identifier match
                description: >-
                  Why this result matched a typed identifier search. value is
                  the original value submitted in assessment_id. Provenance
                  records a customer submission, not a source discovery or
                  verified ownership. Equality is deterministic and has no
                  inferred confidence score. An account result names its newest
                  retained matching assessment, which can differ from latest.
                type: object
                additionalProperties: false
                required:
                  - kind
                  - value
                  - match_basis
                  - provenance
                  - assessment_id
                properties:
                  kind:
                    type: string
                    enum:
                      - email
                      - phone
                      - username
                  value:
                    type: string
                    minLength: 1
                    maxLength: 254
                  match_basis:
                    type: string
                    enum:
                      - exact
                      - canonical
                      - mailbox
                  provenance:
                    type: string
                    enum:
                      - submitted
                    description: >-
                      Customer-submitted input. It does not mean the customer or
                      NoResponse verified ownership.
                  namespace:
                    type: string
                    enum:
                      - customer
                    description: >-
                      Present only for username. A source platform handle is not
                      a customer-namespace username.
                  assessment_id:
                    type: string
                    pattern: ^asm_[0-9A-HJKMNP-TV-Z]{26}$
                    description: >-
                      Opaque, server-assigned assessment id: 'asm_' and a
                      26-character Crockford base32 ULID. Unique within the
                      workspace; another workspace's assessment id answers 404.
                    not:
                      description: >-
                        A NUL or line feed anywhere, refused with not beside
                        anchored patterns. The parser refuses NUL in every
                        request string. This guard also closes engines where $
                        accepts a final line feed.
                      pattern: '[\x00\n]'
                allOf:
                  - if:
                      properties:
                        kind:
                          const: username
                      required:
                        - kind
                    then:
                      required:
                        - namespace
                    else:
                      not:
                        required:
                          - namespace
                  - if:
                      properties:
                        match_basis:
                          const: mailbox
                      required:
                        - match_basis
                    then:
                      properties:
                        kind:
                          const: email
                examples:
                  - kind: username
                    value: JaneDoe
                    match_basis: canonical
                    namespace: customer
                    provenance: submitted
                    assessment_id: asm_01JA2Z8K6Q4V7W9XBCDEFGHJKM
              matched_identifiers:
                type: array
                minItems: 1
                maxItems: 8
                items:
                  title: Submitted identifier term match
                  description: >-
                    One satisfied unique term in an identifier expression.
                    term_index is the zero-based depth-first raw leaf position
                    of its first occurrence. Duplicate normalized terms produce
                    one witness. All satisfied unique terms are returned,
                    ordered by term_index, including satisfied terms in an OR
                    branch that was not needed. value preserves the original
                    submitted value in assessment_id. In assessment scope all
                    witnesses belong to the same matching assessment; account
                    search chooses the newest such assessment. In account scope
                    each term uses its newest retained matching assessment, so
                    witnesses may have different assessment IDs. This evidence
                    does not assert ownership or equality between accounts.
                  type: object
                  additionalProperties: false
                  required:
                    - kind
                    - value
                    - match_basis
                    - provenance
                    - assessment_id
                    - term_index
                  properties:
                    kind:
                      type: string
                      enum:
                        - email
                        - phone
                        - username
                    value:
                      type: string
                      minLength: 1
                      maxLength: 254
                    match_basis:
                      type: string
                      enum:
                        - exact
                        - canonical
                        - mailbox
                    provenance:
                      type: string
                      enum:
                        - submitted
                      description: >-
                        Customer-submitted input. It does not mean the customer
                        or NoResponse verified ownership.
                    namespace:
                      type: string
                      enum:
                        - customer
                      description: >-
                        Present only for username. A source platform handle is
                        not a customer-namespace username.
                    assessment_id:
                      type: string
                      pattern: ^asm_[0-9A-HJKMNP-TV-Z]{26}$
                      description: >-
                        Opaque, server-assigned assessment id: 'asm_' and a
                        26-character Crockford base32 ULID. Unique within the
                        workspace; another workspace's assessment id answers
                        404.
                      not:
                        description: >-
                          A NUL or line feed anywhere, refused with not beside
                          anchored patterns. The parser refuses NUL in every
                          request string. This guard also closes engines where $
                          accepts a final line feed.
                        pattern: '[\x00\n]'
                    term_index:
                      type: integer
                      minimum: 0
                      maximum: 7
                      description: >-
                        Zero-based depth-first position of the first occurrence
                        of this normalized term in the submitted expression.
                  allOf:
                    - if:
                        properties:
                          kind:
                            const: username
                        required:
                          - kind
                      then:
                        required:
                          - namespace
                      else:
                        not:
                          required:
                            - namespace
                    - if:
                        properties:
                          match_basis:
                            const: mailbox
                        required:
                          - match_basis
                      then:
                        properties:
                          kind:
                            const: email
                  examples:
                    - kind: username
                      value: JaneDoe
                      match_basis: canonical
                      namespace: customer
                      provenance: submitted
                      assessment_id: asm_01JA2Z8K6Q4V7W9XBCDEFGHJKM
                      term_index: 0
                description: >-
                  Present only for identifier_expression. All satisfied unique
                  terms, ordered by term_index, with original submitted values
                  and retained assessment witnesses. A duplicate normalized term
                  appears once at its first raw leaf index. The legacy single
                  identifier filter instead returns matched_identifier.
        total:
          type: integer
          minimum: 0
          maximum: 10000
          description: >-
            How many assessments match the filters over every page, counted when
            this page was read: exact up to 10000. At 10000 or more it is 10000
            and total_capped is true. The cursor does not change it; a later
            page can count differently, as results are live.
        total_capped:
          type: boolean
          description: >-
            True when at least 10000 assessments match, so total is 10000 and
            not the exact count.
        next_cursor:
          type: string
          minLength: 1
          maxLength: 1024
          pattern: ^[A-Za-z0-9_-]+$
          not:
            pattern: \n
          description: >-
            Opaque, expiring cursor bound to this environment, operation and
            every filter. Keep the filters unchanged.
        retention_days:
          type: integer
          minimum: 1
          maximum: 365
          default: 365
          description: >-
            The calling workspace's configured retention period in days. Default
            365 (12 months), which is also the maximum: a workspace may only
            shorten it, to at least 1 day. Each record expires from its own
            created_at; see assessment expires_at.
    Problem:
      title: Problem details error
      description: >-
        RFC 9457 problem-details error body returned by every non-2xx API
        response, extended with a stable machine code and request id.
      type: object
      additionalProperties: false
      required:
        - type
        - title
        - status
        - detail
        - code
        - request_id
      properties:
        type:
          type: string
          format: uri-reference
        title:
          type: string
        status:
          type: integer
          minimum: 400
          maximum: 599
        detail:
          type: string
        instance:
          type: string
          format: uri-reference
        code:
          type: string
        request_id:
          type: string
          minLength: 1
        invalid_params:
          type: array
          items:
            type: object
            additionalProperties: false
            required:
              - field
              - reason
            properties:
              field:
                type: string
                minLength: 1
              reason:
                type: string
                minLength: 1
              example:
                type: string
                minLength: 1
  responses:
    SearchAssessments200:
      description: >-
        Search assessments across this environment. A repeat returns the
        original receipt.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AssessmentSearchPage'
    InvalidHistoryQuery:
      description: >-
        The request body, filters or bounds are invalid (invalid_request), or
        the opaque cursor is invalid, expired, modified, or belongs to another
        operation, filter or authenticated scope (invalid_cursor).
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 400
                  code:
                    enum:
                      - invalid_request
                      - invalid_cursor
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
    Unauthorized:
      description: No API key, or one that is malformed, unknown, revoked or expired.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        WWW-Authenticate:
          schema:
            type: string
            const: Bearer realm="noresponse-assessments"
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 401
                  code:
                    enum:
                      - unauthorized
    WorkspaceForbidden:
      description: >-
        The API key is valid but may not use this operation: it lacks the
        operation's scope, or its workspace is not entitled or is suspended.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 403
                  code:
                    enum:
                      - workspace_forbidden
          examples:
            missingScope:
              value:
                type: https://docs.noresponse.org/problems/workspace-forbidden
                title: Forbidden
                status: 403
                detail: The API key does not carry a scope this operation accepts.
                code: workspace_forbidden
                request_id: 0123456789abcdef0123456789abcdef
    NotFound:
      description: >-
        No unexpired assessment with this id for the calling workspace, or a
        malformed assessment_id.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 404
                  code:
                    enum:
                      - not_found
    PayloadTooLarge:
      description: The body exceeds 32768 bytes. Refused before parsing.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 413
                  code:
                    enum:
                      - payload_too_large
    UnsupportedMediaType:
      description: Content-Type is not application/json.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 415
                  code:
                    enum:
                      - unsupported_media_type
    RateLimited:
      description: >-
        The workspace's rate or concurrency limit is exhausted. Retry-After says
        when to retry; the provider applies its own fallback meanwhile.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        Retry-After:
          description: >-
            Whole seconds to wait before polling or retrying. Required on 202,
            429 and 503.
          schema:
            type: string
            pattern: >-
              ^(?:[1-9]|[1-9][0-9]|[1-9][0-9]{2}|[12][0-9]{3}|3[0-5][0-9]{2}|3600)$
            description: Whole decimal seconds; wait at least this long.
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 429
                  code:
                    enum:
                      - rate_limited
          examples:
            limited:
              value:
                type: https://docs.noresponse.org/problems/rate-limited
                title: Rate limited
                status: 429
                detail: >-
                  The tenant's assessment rate is exhausted; retry after the
                  Retry-After interval.
                code: rate_limited
                request_id: 0123456789abcdef0123456789abcdef
    ServiceUnavailable:
      description: >-
        The assessment could not be admitted at all (overload, shutdown or a
        dependency down). An assessment that was admitted answers partial or
        pending instead of 503.
      headers:
        Cache-Control:
          schema:
            type: string
            const: no-store
          required: true
        Retry-After:
          description: >-
            Whole seconds to wait before polling or retrying. Required on 202,
            429 and 503.
          schema:
            type: string
            pattern: >-
              ^(?:[1-9]|[1-9][0-9]|[1-9][0-9]{2}|[12][0-9]{3}|3[0-5][0-9]{2}|3600)$
            description: Whole decimal seconds; wait at least this long.
          required: true
        X-Request-ID:
          description: The request correlation id, 32 lowercase hexadecimal characters.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
            not:
              pattern: \n
          required: true
      content:
        application/problem+json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Problem'
              - properties:
                  status:
                    const: 503
                  code:
                    enum:
                      - service_unavailable
  securitySchemes:
    tenantBearer:
      type: http
      scheme: bearer
      description: >-
        Your API key, sent as `Authorization: Bearer <key>`. A key is
        `nrk_live_` or `nrk_test_`, a 26-character key id, `_` and a
        43-character secret. Account, audit and usage data stay within the key's
        environment. Dedicated team scopes apply across the workspace.


        `assess` creates and reads assessments, records outcomes and reports key
        usage. `investigate` reads accounts, assessment history and request
        diagnostics without export or enforcement access. The legacy `history`
        scope also permits account exports, submitted identifiers and
        enforcement reports. `delete` permits account and assessment deletion.


        `evidence` or `detailed` adds detailed merged evidence and submitted
        identifiers where the operation permits them. Neither grants access to
        the underlying resource alone. `exports` permits exports with the
        underlying account or audit scope. `audit` reads audit events and
        `usage` reads usage. `audit_manage` manages audit streams and retention,
        and includes audit-read and export authority.


        `webhooks` manages webhook endpoints. `integrations` manages hosted
        auth-provider integrations. `management` manages keys, settings, lists,
        reviews and policy evaluations in the key's environment. New keys cannot
        exceed the issuer's effective permissions.


        `settings` reads configuration, previews policy and list changes, runs
        evaluations and changes retention. Publishing decision policy or
        changing lists requires `settings` and `policy_publish` together, or the
        legacy `management` scope.


        `groups` creates and reads groups, adds people, starts and cancels
        screenings and records decisions on people, in the key's environment.


        `members` reads the workspace directory. `members_manage` also
        administers non-owner members and invitations. These scopes require a
        live key issued by a current owner with access to both environments.
        They grant access across the workspace. `management` does not grant team
        access. API keys cannot change owners or accept invitations.


        A missing, unknown, revoked or expired key answers 401. A valid key
        without a required scope answers 403.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.