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

# Page through account enforcements

> List retained enforcement reports for one account with an authenticated cursor.



## OpenAPI

````yaml /openapi.json get /v1/accounts/{account_id}/enforcements
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/accounts/{account_id}/enforcements:
    get:
      tags:
        - accounts
      summary: Page through account enforcements
      description: >-
        List retained enforcement reports for one account with an authenticated
        cursor.
      operationId: listAccountEnforcements
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - name: limit
          in: query
          required: false
          description: Items per page.
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 20
        - name: cursor
          in: query
          required: false
          description: next_cursor from the previous page, unchanged.
          schema:
            type: string
            minLength: 1
            maxLength: 256
            pattern: ^[A-Za-z0-9_-]+$
            not:
              pattern: \n
      responses:
        '200':
          $ref: '#/components/responses/AccountEnforcementList'
        '400':
          $ref: '#/components/responses/InvalidAccountRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/WorkspaceForbidden'
        '404':
          $ref: '#/components/responses/AccountNotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - tenantBearer: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |
            curl --request GET \
              --url 'https://api.noresponse.org/v1/accounts/acct_7f3a9c/enforcements?limit=20' \
              --header "Authorization: Bearer $NORESPONSE_API_KEY"
        - 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.accounts.listEnforcements({
                accountId: "acct_7f3a9c",
              });

              for await (const page of result) {
                console.log(page);
              }
            }

            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.accounts.list_enforcements(account_id="acct_7f3a9c", limit=20)

                while res is not None:
                    # Handle items

                    res = res.next()
        - lang: go
          label: Go
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tnoresponse \"github.com/noresponsehq/go/v12\"\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.Accounts.ListEnforcements(ctx, \"acct_7f3a9c\", noresponse.Pointer[int64](20), nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        for {\n            // handle items\n\n            res, err = res.Next()\n\n            if err != nil {\n                // handle error\n            }\n\n            if res == nil {\n                break\n            }\n        }\n    }\n}\n"
        - lang: java
          label: Java
          source: >
            package hello.world;


            import java.lang.Exception;

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


            public class Application {

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

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


                    sdk.accounts().listEnforcements()
                            .accountId("acct_7f3a9c")
                            .limit(20L)
                            .callAsStream()
                            .forEach((ListAccountEnforcementsResponse item) -> {
                               // handle page
                            });


                }
            }
        - lang: csharp
          label: C#
          source: >
            using NoResponse;

            using NoResponse.Models.Operations;

            using NoResponse.Models.Shared;

            using System;


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


            ListAccountEnforcementsResponse? res = await
            sdk.Accounts.ListEnforcementsAsync(
                accountId: "acct_7f3a9c",
                limit: 20
            );


            while(res != null)

            {
                // handle items

                res = await res.Next!();
            }
        - lang: php
          label: PHP
          source: |
            <?php

            declare(strict_types=1);

            require 'vendor/autoload.php';

            use NoResponse;

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



            $responses = $sdk->accounts->listEnforcements(
                accountId: 'acct_7f3a9c',
                limit: 20

            );


            foreach ($responses as $response) {
                $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', '')
            )

            res = s.accounts.list_enforcements(account_id: 'acct_7f3a9c', limit:
            20)


            unless res.nil?
              # handle response
            end
components:
  parameters:
    AccountId:
      name: account_id
      in: path
      required: true
      schema:
        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_-]*$
      description: >-
        The account_id the workspace sends with its assessments, as one path
        segment (percent-encode '|' and ':' if the client requires it). A value
        that does not match the account_id shape answers 400 invalid_request.
  responses:
    AccountEnforcementList:
      description: Page through account enforcements.
      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/AccountEnforcementList'
          examples:
            page:
              value:
                account_id: acct_7f3a9c
                items:
                  - id: enf_01JA2ZF5N6P7Q8R9S0T1V2W3X4
                    account_id: acct_7f3a9c
                    risk_version: 3
                    flow: account_creation
                    action: restrict
                    state_before: provisional
                    status: applied
                    provider: clerk
                    created_at: '2026-10-14T09:00:02.000Z'
    InvalidAccountRequest:
      description: >-
        account_id does not match its shape, a query parameter is unknown,
        repeated or out of range, or the cursor fails its MAC, belongs to
        another workspace or account, or has expired. invalid_params names the
        offending parameters, never their values.
      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: 400
                  code:
                    enum:
                      - invalid_request
                      - invalid_cursor
    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
    AccountNotFound:
      description: >-
        The calling workspace has no unexpired assessment with a decision for
        this account_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
    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
  schemas:
    AccountEnforcementList:
      title: Account enforcement history
      type: object
      additionalProperties: false
      required:
        - account_id
        - items
      properties:
        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_-]*$
        items:
          type: array
          maxItems: 50
          items:
            title: Recorded enforcement
            description: >-
              The answer of POST /v1/accounts/{account_id}/enforcements: one
              enforcement of one of the calling workspace's accounts, kept once
              per (account, risk_version, flow, action). The first report
              answers 201 with the new record. A repeat answers 200 with the
              record as first stored, whatever the repeat's state_before,
              status, provider or error_code. The one exception is a stored
              failed record followed by an applied report: the record becomes
              applied, keeps its id and created_at, takes the applied report's
              state_before and provider, drops error_code and answers 201, so a
              successful retry after a failure is recorded. Only an applied
              record at the account's current risk_version takes the account out
              of GET /v1/accounts?unenforced=true.
            type: object
            additionalProperties: false
            required:
              - id
              - account_id
              - risk_version
              - flow
              - action
              - state_before
              - status
              - provider
              - created_at
            properties:
              id:
                type: string
                pattern: ^enf_[0-9A-HJKMNP-TV-Z]{26}$
                description: >-
                  Opaque, server-assigned id of one recorded enforcement: 'enf_'
                  and 26 Crockford base32 characters. Unique within the
                  workspace.
                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 account_id of the request path.
                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_-]*$
              risk_version:
                type: integer
                minimum: 1
                description: >-
                  The account's risk_version the workspace acted on. It can be
                  older than the account's current risk_version: such a record
                  is kept and does not count for unenforced.
              flow:
                enum:
                  - account_creation
                  - login
                  - purchase
                description: The flow whose decision the workspace acted on.
              action:
                enum:
                  - revoke_sessions
                  - restrict
                  - unrestrict
                  - fail_onboarding
                  - reject_activation
                  - activate
                  - none
                description: >-
                  What the workspace did in its identity provider:
                  revoke_sessions (signed the account out everywhere), restrict
                  (limited what the account can do), unrestrict (lifted an
                  earlier restriction), fail_onboarding (stopped an account that
                  was still onboarding), reject_activation (refused to activate
                  a provisional account), activate (let a held onboarding or
                  provisional account in) or none (decided to take no action).
              state_before:
                enum:
                  - onboarding
                  - provisional
                  - active
                  - restricted
                  - rejected
                description: >-
                  The account's state in the workspace's identity provider just
                  before the action: onboarding, provisional (created, not yet
                  activated), active, restricted or rejected.
              status:
                enum:
                  - applied
                  - failed
                description: >-
                  applied when the identity provider accepted the action, failed
                  when it refused it or could not be reached. Only applied
                  counts as enforced.
              provider:
                enum:
                  - clerk
                  - workos
                  - auth0
                  - custom
                description: >-
                  The identity provider the action ran in; custom for the
                  workspace's own user store.
              error_code:
                type: string
                minLength: 1
                maxLength: 128
                pattern: ^[a-z0-9_.-]+$
                description: >-
                  Why a failed action failed, as a short code of the workspace's
                  choosing (lower-case letters, digits, '_', '.' and '-'), such
                  as the identity provider's error code. Allowed only with
                  status failed: with status applied it answers 400
                  invalid_request. Keep personal data out of it.
                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]'
              created_at:
                type: string
                format: date-time
                description: >-
                  When NoResponse first recorded this enforcement, in UTC. A
                  failed record that becomes applied keeps it.
            if:
              required:
                - status
              properties:
                status:
                  const: applied
            then:
              not:
                required:
                  - error_code
            $defs:
              enforcement_id:
                type: string
                pattern: ^enf_[0-9A-HJKMNP-TV-Z]{26}$
                description: >-
                  Opaque, server-assigned id of one recorded enforcement: 'enf_'
                  and 26 Crockford base32 characters. Unique within the
                  workspace.
                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]'
              enforcement_action:
                enum:
                  - revoke_sessions
                  - restrict
                  - unrestrict
                  - fail_onboarding
                  - reject_activation
                  - activate
                  - none
                description: >-
                  What the workspace did in its identity provider:
                  revoke_sessions (signed the account out everywhere), restrict
                  (limited what the account can do), unrestrict (lifted an
                  earlier restriction), fail_onboarding (stopped an account that
                  was still onboarding), reject_activation (refused to activate
                  a provisional account), activate (let a held onboarding or
                  provisional account in) or none (decided to take no action).
              enforcement_state:
                enum:
                  - onboarding
                  - provisional
                  - active
                  - restricted
                  - rejected
                description: >-
                  The account's state in the workspace's identity provider just
                  before the action: onboarding, provisional (created, not yet
                  activated), active, restricted or rejected.
              enforcement_status:
                enum:
                  - applied
                  - failed
                description: >-
                  applied when the identity provider accepted the action, failed
                  when it refused it or could not be reached. Only applied
                  counts as enforced.
              enforcement_provider:
                enum:
                  - clerk
                  - workos
                  - auth0
                  - custom
                description: >-
                  The identity provider the action ran in; custom for the
                  workspace's own user store.
              enforcement_error_code:
                type: string
                minLength: 1
                maxLength: 128
                pattern: ^[a-z0-9_.-]+$
                description: >-
                  Why a failed action failed, as a short code of the workspace's
                  choosing (lower-case letters, digits, '_', '.' and '-'), such
                  as the identity provider's error code. Allowed only with
                  status failed: with status applied it answers 400
                  invalid_request. Keep personal data out of it.
                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]'
        next_cursor:
          type: string
          minLength: 1
          maxLength: 256
          pattern: ^[A-Za-z0-9_-]+$
          description: >-
            Opaque, expiring cursor bound to the workspace, environment, account
            and history kind. Absent at the end.
    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
  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.