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

# Summarize outcomes, enforcements and reviews

> Counts three retained populations in one environment and a past interval of at most 31 days. All counts use one consistent snapshot.

Outcomes select current accounts by their current assessment's creation time. They use current effective feedback, with explicit counts for unknown and unreported outcomes.
Enforcements count report rows created in the interval, using their current reported applied or failed status. Individual retries do not count as separate attempts.
Reviews select reviews created in the interval, using their current status, assignment and conclusion. Label coverage counts conclusive resolutions among resolved reviews.

Each population has its own denominator. Do not combine them into one funnel. A zero denominator does not imply a zero rate.
These reports do not establish ground truth, verified execution or prevented fraud. Current retention and source deletion apply to every count.

The combined limit is 100000 population rows. A larger result returns 400 `invalid_request` without partial totals. Choose a shorter interval.
An unavailable query returns 503 `service_unavailable`. NoResponse records successful reads in your audit log before returning the summary.
Requires `management` plus `history` or `investigate`, in the key's own environment.



## OpenAPI

````yaml /openapi.json post /v1/workspaces/{workspace_id}/operations/summary
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/workspaces/{workspace_id}/operations/summary:
    post:
      tags:
        - workspaces
      summary: Summarize outcomes, enforcements and reviews
      description: >-
        Counts three retained populations in one environment and a past interval
        of at most 31 days. All counts use one consistent snapshot.


        Outcomes select current accounts by their current assessment's creation
        time. They use current effective feedback, with explicit counts for
        unknown and unreported outcomes.

        Enforcements count report rows created in the interval, using their
        current reported applied or failed status. Individual retries do not
        count as separate attempts.

        Reviews select reviews created in the interval, using their current
        status, assignment and conclusion. Label coverage counts conclusive
        resolutions among resolved reviews.


        Each population has its own denominator. Do not combine them into one
        funnel. A zero denominator does not imply a zero rate.

        These reports do not establish ground truth, verified execution or
        prevented fraud. Current retention and source deletion apply to every
        count.


        The combined limit is 100000 population rows. A larger result returns
        400 `invalid_request` without partial totals. Choose a shorter interval.

        An unavailable query returns 503 `service_unavailable`. NoResponse
        records successful reads in your audit log before returning the summary.

        Requires `management` plus `history` or `investigate`, in the key's own
        environment.
      operationId: summarizeWorkspaceOperations
      parameters:
        - $ref: '#/components/parameters/WorkspaceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkspaceOperationsSummaryRequest'
      responses:
        '200':
          $ref: '#/components/responses/WorkspaceOperationsSummary'
        '400':
          $ref: '#/components/responses/InvalidControlRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/ControlForbidden'
        '404':
          $ref: '#/components/responses/WorkspaceNotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - tenantBearer: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |
            curl --request POST \
              --url 'https://api.noresponse.org/v1/workspaces/tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM/operations/summary' \
              --header "Authorization: Bearer $NORESPONSE_API_KEY" \
              --header 'Content-Type: application/json' \
              --data '{
              "environment": "live",
              "from": "2026-01-01T00:00:00Z",
              "to": "2026-01-02T00:00:00Z"
            }'
        - 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.operations.summarize({
                workspaceId: "tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM",
                body: {
                  environment: "live",
                  from: "2026-01-01T00:00:00Z",
                  to: "2026-01-02T00:00:00Z",
                },
              });

              console.log(result);
            }

            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.operations.summarize(workspace_id="tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM", environment="live", from_="2026-01-01T00:00:00Z", to="2026-01-02T00:00:00Z")

                # Handle response
                print(res)
        - 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.Operations.Summarize(ctx, \"tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM\", components.WorkspaceOperationsSummaryRequest{\n        Environment: components.AuditSettingsEnvironmentLive,\n        From: \"2026-01-01T00:00:00Z\",\n        To: \"2026-01-02T00:00:00Z\",\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 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.SummarizeWorkspaceOperationsResponse;

            import org.noresponse.models.shared.AuditSettingsEnvironment;

            import
            org.noresponse.models.shared.WorkspaceOperationsSummaryRequest;


            public class Application {

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

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

                    SummarizeWorkspaceOperationsResponse res = sdk.operations().summarize()
                            .workspaceId("tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM")
                            .body(WorkspaceOperationsSummaryRequest.builder()
                                .environment(AuditSettingsEnvironment.LIVE)
                                .from("2026-01-01T00:00:00Z")
                                .to("2026-01-02T00:00:00Z")
                                .build())
                            .call();

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

            using NoResponse.Models.Shared;

            using System;


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


            var res = await sdk.Operations.SummarizeAsync(
                workspaceId: "tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM",
                body: new WorkspaceOperationsSummaryRequest() {
                    Environment = AuditSettingsEnvironment.Live,
                    From = "2026-01-01T00:00:00Z",
                    To = "2026-01-02T00:00:00Z",
                }
            );


            // 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();

            $body = new Shared\WorkspaceOperationsSummaryRequest(
                environment: Shared\AuditSettingsEnvironment::Live,
                from: '2026-01-01T00:00:00Z',
                to: '2026-01-02T00:00:00Z',
            );

            $response = $sdk->workspaceOperations->summarize(
                workspaceId: 'tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM',
                body: $body

            );

            $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.operations.summarize(workspace_id:
            'tnt_01JA2Z8K6Q4V7W9XBCDEFGHJKM', body:
            Models::Shared::WorkspaceOperationsSummaryRequest.new(
              environment: Models::Shared::AuditSettingsEnvironment::LIVE,
              from: '2026-01-01T00:00:00Z',
              to: '2026-01-02T00:00:00Z'
            ))


            unless res.nil?
              # handle response
            end
components:
  parameters:
    WorkspaceId:
      name: workspace_id
      in: path
      required: true
      schema:
        type: string
        pattern: ^[A-Za-z0-9][A-Za-z0-9_.-]{0,122}$
        description: >-
          The workspace id, which is also its live environment's workspace id;
          the test environment's is the same id with:test appended. A workspace
          created through the API is tnt_ and a 26-character ULID.
      description: >-
        The workspace id. A workspace the acting user is not an active member of
        answers 404, as do another workspace than an API key's own, a malformed
        id and a test environment's id.
  schemas:
    WorkspaceOperationsSummaryRequest:
      title: Workspace operations summary request
      type: object
      additionalProperties: false
      required:
        - environment
        - from
        - to
      properties:
        environment:
          enum:
            - live
            - test
        from:
          type: string
          format: date-time
        to:
          type: string
          format: date-time
      description: >-
        Read a past [from,to) interval of at most 31 days. The complete retained
        populations must fit a combined 100000-row budget and a 1500ms SQL
        statement budget. No pagination or sampled totals; choose a shorter
        interval after a row-budget refusal.
    WorkspaceOperationsSummary:
      title: Workspace operations summary
      type: object
      additionalProperties: false
      required:
        - workspace_id
        - environment
        - from
        - to
        - as_of
        - retained_from
        - retention_days
        - row_budget
        - records_read
        - truncated
        - outcomes
        - enforcements
        - reviews
      properties:
        workspace_id:
          type: string
          pattern: ^[A-Za-z0-9][A-Za-z0-9_.-]{0,122}$
          description: >-
            The workspace id, which is also its live environment's workspace id;
            the test environment's is the same id with:test appended. A
            workspace created through the API is tnt_ and a 26-character ULID.
        environment:
          enum:
            - live
            - test
        from:
          type: string
          format: date-time
        to:
          type: string
          format: date-time
        as_of:
          type: string
          format: date-time
        retained_from:
          type: string
          format: date-time
        retention_days:
          type: integer
          minimum: 1
          maximum: 365
        row_budget:
          const: 100000
        records_read:
          type: integer
          minimum: 0
          maximum: 100000
        truncated:
          const: false
        outcomes:
          type: object
          additionalProperties: false
          required:
            - population
            - denominator
            - reported
            - unreported
            - label_coverage
            - by_outcome
          properties:
            population:
              const: retained_current_accounts_by_current_assessment_created_at
            denominator:
              type: integer
              minimum: 0
              maximum: 100000
            reported:
              type: integer
              minimum: 0
              maximum: 100000
            unreported:
              type: integer
              minimum: 0
              maximum: 100000
            label_coverage:
              type: object
              additionalProperties: false
              required:
                - numerator
                - denominator
              properties:
                numerator:
                  type: integer
                  minimum: 0
                  maximum: 100000
                denominator:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Counts only; a zero denominator means no eligible retained
                records and does not imply a zero rate.
            by_outcome:
              type: object
              additionalProperties: false
              properties:
                confirmed_abuse:
                  type: integer
                  minimum: 0
                  maximum: 100000
                account_takeover:
                  type: integer
                  minimum: 0
                  maximum: 100000
                chargeback:
                  type: integer
                  minimum: 0
                  maximum: 100000
                false_positive:
                  type: integer
                  minimum: 0
                  maximum: 100000
                legitimate:
                  type: integer
                  minimum: 0
                  maximum: 100000
                unknown:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Current customer-reported labels, not independently established
                ground truth. Missing keys mean zero. Unknown is an explicit
                report; absent or expired feedback is unreported.
          description: >-
            One account whose current completed assessment was created in
            [from,to) and remains retained at as_of. The effective account
            feedback head is read at as_of, even if received outside this
            window; expiry or an unknown correction never revives an older
            label. reported includes unknown; label_coverage numerator excludes
            unknown, denominator is eligible accounts. This is a changing
            current-account cohort, not a historical assessment cohort.
        enforcements:
          type: object
          additionalProperties: false
          required:
            - population
            - denominator
            - accounts
            - reported_applied
            - reported_failed
            - applied_coverage
          properties:
            population:
              const: retained_enforcement_reports_by_created_at
            denominator:
              type: integer
              minimum: 0
              maximum: 100000
            accounts:
              type: integer
              minimum: 0
              maximum: 100000
            reported_applied:
              type: integer
              minimum: 0
              maximum: 100000
            reported_failed:
              type: integer
              minimum: 0
              maximum: 100000
            applied_coverage:
              type: object
              additionalProperties: false
              required:
                - numerator
                - denominator
              properties:
                numerator:
                  type: integer
                  minimum: 0
                  maximum: 100000
                denominator:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Counts only; a zero denominator means no eligible retained
                records and does not imply a zero rate.
          description: >-
            Retained customer enforcement report rows created in [from,to), one
            row per account/risk_version/flow/action. A later applied report can
            replace failed at the original created_at; retries are not
            additional attempts here. applied_coverage divides reported_applied
            by report rows, including explicit action none; it is not
            independently verified execution, all requested actions, or
            prevented fraud. Unreported actions are unknown.
        reviews:
          type: object
          additionalProperties: false
          required:
            - population
            - denominator
            - open
            - in_progress
            - resolved
            - assigned
            - unassigned
            - label_coverage
            - conclusions
          properties:
            population:
              const: retained_reviews_by_created_at
            denominator:
              type: integer
              minimum: 0
              maximum: 100000
            open:
              type: integer
              minimum: 0
              maximum: 100000
            in_progress:
              type: integer
              minimum: 0
              maximum: 100000
            resolved:
              type: integer
              minimum: 0
              maximum: 100000
            assigned:
              type: integer
              minimum: 0
              maximum: 100000
            unassigned:
              type: integer
              minimum: 0
              maximum: 100000
            label_coverage:
              type: object
              additionalProperties: false
              required:
                - numerator
                - denominator
              properties:
                numerator:
                  type: integer
                  minimum: 0
                  maximum: 100000
                denominator:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Counts only; a zero denominator means no eligible retained
                records and does not imply a zero rate.
            conclusions:
              type: object
              additionalProperties: false
              properties:
                benign:
                  type: integer
                  minimum: 0
                  maximum: 100000
                abuse:
                  type: integer
                  minimum: 0
                  maximum: 100000
                inconclusive:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Current resolution of each resolved retained review; prior
                resolutions and reopened reviews do not count. Missing keys mean
                zero. These investigation conclusions are independent of account
                feedback.
          description: >-
            Reviews created in [from,to) whose review and current account
            assessment remain retained. Status and assignment are current at
            as_of, not a transition history. label_coverage numerator is
            resolved reviews labeled benign or abuse; denominator is resolved
            reviews. Inconclusive is not a known outcome. Review conclusions do
            not change account feedback or enforcement.
      description: >-
        The three populations have independent denominators and must not be
        added or compared as one funnel. All counts and retention come from one
        database statement snapshot. as_of is its start time; retained_from is
        the maximum current retention horizon, not a promise of history before
        erasure. Erased or expired detail is excluded, even before maintenance
        removes it. Counts describe retained observations only; no
        false-positive, false-negative, prevented-loss or causal claims are
        inferred. Every successful read is transactionally audited before the
        response.
      $defs:
        coverage:
          type: object
          additionalProperties: false
          required:
            - numerator
            - denominator
          properties:
            numerator:
              type: integer
              minimum: 0
              maximum: 100000
            denominator:
              type: integer
              minimum: 0
              maximum: 100000
          description: >-
            Counts only; a zero denominator means no eligible retained records
            and does not imply a zero rate.
        outcomes:
          type: object
          additionalProperties: false
          required:
            - population
            - denominator
            - reported
            - unreported
            - label_coverage
            - by_outcome
          properties:
            population:
              const: retained_current_accounts_by_current_assessment_created_at
            denominator:
              type: integer
              minimum: 0
              maximum: 100000
            reported:
              type: integer
              minimum: 0
              maximum: 100000
            unreported:
              type: integer
              minimum: 0
              maximum: 100000
            label_coverage:
              type: object
              additionalProperties: false
              required:
                - numerator
                - denominator
              properties:
                numerator:
                  type: integer
                  minimum: 0
                  maximum: 100000
                denominator:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Counts only; a zero denominator means no eligible retained
                records and does not imply a zero rate.
            by_outcome:
              type: object
              additionalProperties: false
              properties:
                confirmed_abuse:
                  type: integer
                  minimum: 0
                  maximum: 100000
                account_takeover:
                  type: integer
                  minimum: 0
                  maximum: 100000
                chargeback:
                  type: integer
                  minimum: 0
                  maximum: 100000
                false_positive:
                  type: integer
                  minimum: 0
                  maximum: 100000
                legitimate:
                  type: integer
                  minimum: 0
                  maximum: 100000
                unknown:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Current customer-reported labels, not independently established
                ground truth. Missing keys mean zero. Unknown is an explicit
                report; absent or expired feedback is unreported.
          description: >-
            One account whose current completed assessment was created in
            [from,to) and remains retained at as_of. The effective account
            feedback head is read at as_of, even if received outside this
            window; expiry or an unknown correction never revives an older
            label. reported includes unknown; label_coverage numerator excludes
            unknown, denominator is eligible accounts. This is a changing
            current-account cohort, not a historical assessment cohort.
        enforcements:
          type: object
          additionalProperties: false
          required:
            - population
            - denominator
            - accounts
            - reported_applied
            - reported_failed
            - applied_coverage
          properties:
            population:
              const: retained_enforcement_reports_by_created_at
            denominator:
              type: integer
              minimum: 0
              maximum: 100000
            accounts:
              type: integer
              minimum: 0
              maximum: 100000
            reported_applied:
              type: integer
              minimum: 0
              maximum: 100000
            reported_failed:
              type: integer
              minimum: 0
              maximum: 100000
            applied_coverage:
              type: object
              additionalProperties: false
              required:
                - numerator
                - denominator
              properties:
                numerator:
                  type: integer
                  minimum: 0
                  maximum: 100000
                denominator:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Counts only; a zero denominator means no eligible retained
                records and does not imply a zero rate.
          description: >-
            Retained customer enforcement report rows created in [from,to), one
            row per account/risk_version/flow/action. A later applied report can
            replace failed at the original created_at; retries are not
            additional attempts here. applied_coverage divides reported_applied
            by report rows, including explicit action none; it is not
            independently verified execution, all requested actions, or
            prevented fraud. Unreported actions are unknown.
        reviews:
          type: object
          additionalProperties: false
          required:
            - population
            - denominator
            - open
            - in_progress
            - resolved
            - assigned
            - unassigned
            - label_coverage
            - conclusions
          properties:
            population:
              const: retained_reviews_by_created_at
            denominator:
              type: integer
              minimum: 0
              maximum: 100000
            open:
              type: integer
              minimum: 0
              maximum: 100000
            in_progress:
              type: integer
              minimum: 0
              maximum: 100000
            resolved:
              type: integer
              minimum: 0
              maximum: 100000
            assigned:
              type: integer
              minimum: 0
              maximum: 100000
            unassigned:
              type: integer
              minimum: 0
              maximum: 100000
            label_coverage:
              type: object
              additionalProperties: false
              required:
                - numerator
                - denominator
              properties:
                numerator:
                  type: integer
                  minimum: 0
                  maximum: 100000
                denominator:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Counts only; a zero denominator means no eligible retained
                records and does not imply a zero rate.
            conclusions:
              type: object
              additionalProperties: false
              properties:
                benign:
                  type: integer
                  minimum: 0
                  maximum: 100000
                abuse:
                  type: integer
                  minimum: 0
                  maximum: 100000
                inconclusive:
                  type: integer
                  minimum: 0
                  maximum: 100000
              description: >-
                Current resolution of each resolved retained review; prior
                resolutions and reopened reviews do not count. Missing keys mean
                zero. These investigation conclusions are independent of account
                feedback.
          description: >-
            Reviews created in [from,to) whose review and current account
            assessment remain retained. Status and assignment are current at
            as_of, not a transition history. label_coverage numerator is
            resolved reviews labeled benign or abuse; denominator is resolved
            reviews. Inconclusive is not a known outcome. Review conclusions do
            not change account feedback or enforcement.
    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:
    WorkspaceOperationsSummary:
      description: >-
        Complete retained outcome, enforcement and review populations with
        independent denominators and label coverage. The data snapshot and audit
        commit complete before any counts are returned.
      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/WorkspaceOperationsSummary'
    InvalidControlRequest:
      description: >-
        The body breaks its schema, or a console credential named no valid
        NR-Acting-User.
      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
    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
    ControlForbidden:
      description: >-
        workspace_forbidden: an API key without the management scope, or any API
        key on a route other than the key, settings and list routes.
        role_forbidden: a console credential's acting user is an active member
        whose role does not grant the operation.
      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
                      - role_forbidden
    WorkspaceNotFound:
      description: >-
        No such workspace, member, invite, key or environment for the caller. A
        workspace the acting user is not an active member of answers this too,
        as do another workspace and the other environment to an API key, so no
        answer shows which workspaces exist.
      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
    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.