{
  "openapi": "3.1.0",
  "info": {
    "title": "Qualiteam API",
    "version": "1.0.0",
    "description": "Read projects, conversations, evaluation results and settings from your own integration. All endpoints are read-only.\n\nBase URL: `https://qualiteam.ai/api/v1`\n\n# Authentication\n\n[Create an API key](/docs/api/guide#create-access) in Company → API Access. Send it in the Authorization header:\n\n```bash\nexport QUALITEAM_API_KEY='your-key-from-api-access'\ncurl --fail-with-body 'https://qualiteam.ai/api/v1/projects' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\"\n```\n\nKeep keys in a server-side secret manager, out of browser code, URLs and logs. API keys allow reading data only; they cannot manage integrations or change permissions. Keys do not expire automatically. Administrators can revoke a key or rotate the integration's key, retiring all older keys within 24 hours. Revocation takes effect on the next request.\n\n# Resources and permissions\n\n`GET /projects` lists granted projects. `GET /projects/{project_id}` returns metadata, including reporting timezone and current score display direction. Any project grant allows this metadata; its shared instructions (`description`) require `rules.read` or `criteria.read`, otherwise the field is `null`.\n\nEach resource has list and detail endpoints:\n\n```text\nGET /projects/{project_id}/{resource}\nGET /projects/{project_id}/{resource}/{resource_id}\n```\n\n| Resource | Required permission |\n| --- | --- |\n| `managers` | `managers.read` |\n| `conversations` | `conversations.read` |\n| `messages` | `messages.read` and `conversations.read` |\n| `evaluations`, `reviews`, `attribute-results` | `evaluations.read` |\n| `appeals` | `appeals.read` |\n| `alerts`, `alert-definitions` | `alerts.read` |\n| `criteria` | `criteria.read` |\n| `attributes` | `attributes.read` |\n| `evaluation-tags` | `evaluation_tags.read` |\n| `flows` | `flows.read` |\n| `rules` | `rules.read` |\n| `knowledge-base` | `knowledge_base.read` |\n| `notification-rules`, `notification-recipients` | `notifications.read` |\n| `notifications` | `notification_events.read` |\n\nEach permission covers the whole selected project, including unpublished evaluations, pending alerts and conversation history from disabled or disconnected sources. Resource access matches a company administrator's. Notification events additionally require that their saved content remains accessible to the original recipient. V1 excludes writes, billing, user management, playground and benchmarks.\n\nResource permissions include provider IDs (such as agent and chat IDs) and stored text. Email and Telegram handles require `contacts.read`; otherwise they are `null`. Personal data inside messages, names, comments and instructions remains readable without this permission. PII redaction follows project settings at import time; the API does no further redaction.\n\nConversation detail includes evaluation, alert and tag IDs only with the relevant permission (otherwise `null`). Alerts include their saved condition and matched-value snapshots; full evaluations require their own permission.\n\nProject rules, criteria instructions and extracted knowledge-base text require their respective permissions. The API excludes credentials, access hashes, internal system prompts, usage/billing details and internal job payloads.\n\n# Pagination and filters\n\nLists return:\n\n```json\n{\n  \"data\": [{ \"id\": \"example-resource-id\" }],\n  \"next_cursor\": \"opaque-continuation-token\"\n}\n```\n\n`limit` defaults to 50, with a maximum of 100. Lists have no automatic total count. Pass the returned `next_cursor` as `cursor`, keeping the same project, resource and filters, until it is `null`. You can change the page size. Cursors are signed, belong to one integration and do not freeze the data.\n\nWith `manager_ids`, the API resolves agents for legacy or unevaluated conversations in batches. Pages can have fewer than `limit` results, even zero, while still returning a `next_cursor`. Continue until the cursor is `null`.\n\nResults sort by resource ID ascending. Messages sort by conversation ID, timestamp, then message ID, with missing legacy timestamps first. Repeat array parameters as `ids=id1&ids=id2`, up to 100 values. Unknown parameters and unsupported filter/resource combinations are rejected.\n\n| Filter | Where supported |\n| --- | --- |\n| `ids` | Database resources and projects |\n| `conversation_ids` | Conversations and their child resources |\n| `manager_ids` | Managers; message authors; card attribution for evaluations, reviews and appeals; conversation attribution for conversations, attribute results and alerts |\n| `evaluation_id` | Reviews, appeals |\n| `attribute_id` | Attribute results, alert definitions |\n| `alert_id` | Alerts |\n| `source_id` | Managers, conversations, messages |\n| `status` | Evaluations (`result_status`), appeals, alerts |\n| `state` | Conversations |\n| `published` | Evaluations |\n| `approved` | Evaluations, reviews |\n| `created_from`, `created_to` | Resources with `created_at` |\n| `updated_from`, `updated_to` | Resources with `updated_at` |\n| `evaluated_from`, `evaluated_to` | Evaluations |\n| `published_from`, `published_to` | Evaluations |\n| `triggered_from`, `triggered_to` | Alerts |\n\nProjects support `ids`, `limit`, `cursor`; flows support `limit`, `cursor`. Lists are compact. Detail endpoints add criteria instructions, knowledge text, appeal comments and per-criterion results. Message lists include text for batch transcript reads.\n\nDate filters use ISO 8601 timestamps with `Z` or a timezone offset. Date-only values and timestamps without a timezone return 422. Each filter applies to its named timestamp, including the lower bound and excluding the upper bound.\n\nMessage lists require 1 to 100 `conversation_ids`, including on later pages. IDs outside the granted project return no data. `in_evaluation_window` marks timestamps inside `loaded_from`/`loaded_to`; `is_internal_note` is independent. Reply and forward snapshots provide context and do not count as messages or evaluation activity.\n\n```bash\ncurl --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\" \\\n  --data-urlencode 'conversation_ids=CONVERSATION_ID' \\\n  --data-urlencode 'limit=100'\n```\n\n# Evaluation and history semantics\n\n## Scores and dates\n\n- `score` and `total_score` are the effective reviewed values; each criterion's `model_score` keeps the original model value. Use the card's scoring mode, min/max and the project's current `addition_score_direction` to interpret scores. Direction affects display only.\n- `attribute-results` belong to conversations and include effective and original numeric/time values and category sets. Numeric/time edits follow the application's QC rules. Original model category sets are immutable; deleted categories remain readable in history.\n- Approval and publication are separate. `evaluated_at` records evaluation, `published_at` records publication, and `loaded_from`/`loaded_to` define conversation coverage. As in reporting, `reporting_date` uses the last in-window message (or window end) and project timezone.\n\n## Agents and deleted cards\n\n- A conversation can have several cards with different agents. Each card has `attributed_manager_ids`; the conversation combines these, with fallback attribution for unevaluated or legacy data. Manager filters follow the same rules.\n- Reviews and appeals use their own card's agents. Without a card, their attribution is unknown: `manager_ids` filters exclude them, but unfiltered lists include them.\n- IDs stay stable until deletion. A replacement card gets a new ID. Reviews and appeals can survive with `evaluation_id: null` as conversation history; API reads never attach them to a replacement.\n- An approved review without a card can keep the evaluation card's `approved` true if the conversation has exactly one card and no card-linked review. Ownership remains unknown, so `review_id`, `approved_at` and reviewer references stay null. With multiple cards, it approves none.\n\n## Alerts and notifications\n\n- Alerts belong to conversations and identify neither a responsible agent nor a card. All states (`active`, `pending_approval`, `read`), historical hits and soft-deleted definitions remain readable. `triggered_at` records the original hit; activation/read changes use `updated_at`.\n- Notification rules list alert/appeal subscriptions, recipients and manager IDs. They do not describe reporting lines or publication-to-team-lead routing.\n- Saved recipients may be ineligible for built-in delivery. Before sending project data, verify recipient access and channel ownership. The saved `telegram_handle` may have changed owners and does not verify a Telegram destination.\n\n`app_url` opens the relevant application screen and requires a user login with project access.\n\n# Notification feed\n\nUse `GET /projects/{project_id}/notifications` to read notifications that Qualiteam has already prepared for recipients. Fetch `/notifications/{id}` for the text, event data, managers and links. Your integration can deliver this content through Slack without fetching conversations or evaluations.\n\nAsk an administrator to grant `notification_events.read` in Company → API Access. Existing keys do not gain this permission automatically. `notifications.read` still covers settings only. Contact fields also require `contacts.read`.\n\nThe feed follows existing alert/appeal rules and agent-publication settings. One notification is shared across its delivery channels. Successful email/Telegram delivery does not remove it from the feed. There is no Slack delivery or delivery acknowledgement endpoint.\n\n1. Read the list, optionally filtering by `event_type` or `recipient_id`.\n2. Follow `next_cursor` until it is null, including through empty pages.\n3. Save the final `resume_cursor`; use it as `cursor` on the next poll with the same filters.\n4. Fetch details and store delivered notification IDs to prevent duplicates. Save your checkpoint only after processing its page.\n\nCommitted notifications normally appear within a few seconds. They remain available for 90 days after entering the feed; pre-upgrade queued notifications are not added. HTTP 410 means the cursor is too old: restart without it and deduplicate against saved IDs. An expired history window cannot be recovered through the API.\n\nAccess is rechecked when reading. Deleted sources or recipients, or lost membership can make an older notification unavailable (404 on detail). Contact edits and Telegram connection state do not erase API history. Publication notifications still require publication access and enabled agent-publication settings. Recipient contact fields describe the saved notification. Content is a saved snapshot; dates and links in the message describe that notification.\n\nFor publication notifications, recipient IDs are platform user IDs (`kind: agent`); other events use notification-recipient IDs (`kind: recipient`). Alerts identify conversations, not a responsible agent. The `managers` list identifies the permitted related agents. If an agent profile has no name, notification details return `agent_name: \"\"`.\n\n# Polling example\n\nRead currently published evaluations within an evaluation-time range from your server. Your integration handles message composition and delivery.\n\n```python\nimport os\nimport requests\n\nbase = \"https://qualiteam.ai/api/v1\"\nproject_id = \"PROJECT_ID\"\nparams = {\n    \"published\": \"true\",\n    \"evaluated_from\": \"2026-10-01T00:00:00Z\",\n    \"evaluated_to\": \"2026-10-08T00:00:00Z\",\n    \"limit\": 100,\n}\nheaders = {\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"}\n\nwith requests.Session() as session:\n    while True:\n        response = session.get(\n            f\"{base}/projects/{project_id}/evaluations\",\n            headers=headers, params=params, timeout=30,\n        )\n        response.raise_for_status()\n        page = response.json()\n        for evaluation in page[\"data\"]:\n            print(evaluation[\"id\"], evaluation[\"total_score\"], evaluation[\"app_url\"])\n        if page[\"next_cursor\"] is None:\n            break\n        params[\"cursor\"] = page[\"next_cursor\"]\n```\n\nThe API returns current state, so pages can change during a scan. When polling, re-read the relevant period and deduplicate by resource ID. Child changes may leave the parent's timestamp unchanged. Polling can miss deletions, unpublish/republish cycles and intermediate states. These resource endpoints have no change log or deletion markers; ID order cannot identify new items since the last poll. The notification feed has its own resumable cursor and 90-day history. Webhooks are not available.\n\n# Limits and errors\n\nLimits default to 60 requests/minute per integration and 300/minute per company, shared across keys and workers. Counters reset in fixed minute windows; quota rejections also count toward the company limit. Administrators cannot change these server limits.\n\nFor `429`, wait the `Retry-After` seconds before retrying. For `503` or temporary network errors, use bounded backoff. Authentication and permission errors require fixing the key or grants.\n\n| HTTP status | Meaning |\n| --- | --- |\n| 400 | Invalid cursor, unsupported filters or missing message conversation IDs |\n| 401 | Missing, invalid, expired or revoked API key |\n| 403 | Project is granted, but a required scope is missing |\n| 404 | Resource/project is absent or outside the grant |\n| 405 | Unsupported write operation |\n| 409 | Legacy flow storage has an ambiguous project prefix; contact support |\n| 410 | Notification cursor expired; restart without a cursor to read retained history |\n| 422 | Invalid parameter type, range or unknown parameter |\n| 429 | Integration or company rate limit |\n| 503 | Database busy; retry shortly |\n\nErrors use `{\"error\":{\"code\":403,\"message\":\"Missing required API scope\"}}`. Data and key-creation responses use `Cache-Control: no-store`. OpenAPI is public, with no customer data. The reference shows examples without sending API requests.\n\n# Versioning\n\n`/api/v1` preserves existing fields, types and meanings. Ignore unfamiliar fields from compatible optional additions. Breaking changes use `/api/v2`. V1 remains supported for at least 180 days after a migration announcement, with migration instructions and a retirement date. Internal frontend endpoints follow a separate lifecycle outside this contract.\n"
  },
  "servers": [
    {
      "url": "https://qualiteam.ai/api/v1"
    }
  ],
  "paths": {
    "/projects": {
      "get": {
        "tags": [
          "projects"
        ],
        "summary": "List projects",
        "operationId": "projects_projects_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ProjectSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [],
        "description": "Granted projects, reporting timezone and score settings. Any grant allows project metadata. Shared instructions in `description` require `rules.read` or `criteria.read`.\n\n**Required permissions:** Any grant on the project.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}": {
      "get": {
        "tags": [
          "projects"
        ],
        "summary": "Get project",
        "operationId": "project_detail_projects__project_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [],
        "description": "Granted projects, reporting timezone and score settings. Any grant allows project metadata. Shared instructions in `description` require `rules.read` or `criteria.read`.\n\n**Required permissions:** Any grant on the project.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/notifications": {
      "get": {
        "tags": [
          "notifications"
        ],
        "summary": "List notifications",
        "operationId": "notification_events_projects__project_id__notifications_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Use next_cursor for another page, or resume_cursor to poll for new notifications. Keep filters unchanged. A page may be empty when saved content is no longer authorized. An expired cursor returns 410."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "event_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/NotificationEventType"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Event Type"
            },
            "description": "Filter by alert_fired, appeal_created, appeal_resolved or agent_conversations_published."
          },
          {
            "name": "recipient_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Recipient Id"
            },
            "description": "Recipient ID from a notification. Publication notifications use the recipient's platform user ID."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationFeedPage"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          },
          "410": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 410,
                    "message": "Notification cursor is older than the retained history. Restart without a cursor and deduplicate saved IDs."
                  }
                }
              }
            },
            "description": "Notification cursor is older than the retained history. Restart without a cursor and deduplicate saved IDs."
          }
        },
        "x-required-scopes": [
          "notification_events.read"
        ],
        "description": "Ready notifications for your own delivery integration. One record per recipient, shared across email and Telegram. History lasts 90 days after appearing in the feed. Existing notification rules and publication settings determine which events are created. Detail includes text, recipients and links; no conversation or evaluation requests are needed. Read all pages with next_cursor, then save resume_cursor for the next poll. Recipient access is rechecked on every read. Channel delivery does not consume the feed.\n\n**Required permissions:** `notification_events.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/notifications/{notification_id}": {
      "get": {
        "tags": [
          "notifications"
        ],
        "summary": "Get notification",
        "operationId": "notification_event_detail_projects__project_id__notifications__notification_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "notification_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Notification Id"
            },
            "description": "Notification ID from this project's feed."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "notification_events.read"
        ],
        "description": "Ready notifications for your own delivery integration. One record per recipient, shared across email and Telegram. History lasts 90 days after appearing in the feed. Existing notification rules and publication settings determine which events are created. Detail includes text, recipients and links; no conversation or evaluation requests are needed. Read all pages with next_cursor, then save resume_cursor for the next poll. Recipient access is rechecked on every read. Channel delivery does not consume the feed.\n\n**Required permissions:** `notification_events.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications/NOTIFICATION_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications/NOTIFICATION_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/managers": {
      "get": {
        "tags": [
          "managers"
        ],
        "summary": "List managers",
        "operationId": "list_managers_projects__project_id__managers_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "source_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source Id"
            },
            "description": "Exact external provider ID, as returned by this resource."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ManagerSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "managers.read"
        ],
        "description": "Support agents and their provider IDs, including agents no longer evaluated. Email requires the additional `contacts.read` permission.\n\n**Required permissions:** `managers.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/managers/{resource_id}": {
      "get": {
        "tags": [
          "managers"
        ],
        "summary": "Get manager",
        "operationId": "get_managers_projects__project_id__managers__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagerDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "managers.read"
        ],
        "description": "Support agents and their provider IDs, including agents no longer evaluated. Email requires the additional `contacts.read` permission.\n\n**Required permissions:** `managers.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/conversations": {
      "get": {
        "tags": [
          "conversations"
        ],
        "summary": "List conversations",
        "operationId": "list_conversations_projects__project_id__conversations_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "conversation_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Conversation Ids"
            },
            "description": "Match conversation IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "source_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source Id"
            },
            "description": "Exact external provider ID, as returned by this resource."
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "State"
            },
            "description": "Exact saved conversation state."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ConversationSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "conversations.read"
        ],
        "description": "Saved conversations, coverage windows and agent attribution, including history from disabled sources. Detail includes evaluation, alert and tag IDs only with their respective read permissions.\n\n**Required permissions:** `conversations.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/conversations/{resource_id}": {
      "get": {
        "tags": [
          "conversations"
        ],
        "summary": "Get conversation",
        "operationId": "get_conversations_projects__project_id__conversations__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConversationDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "conversations.read"
        ],
        "description": "Saved conversations, coverage windows and agent attribution, including history from disabled sources. Detail includes evaluation, alert and tag IDs only with their respective read permissions.\n\n**Required permissions:** `conversations.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/messages": {
      "get": {
        "tags": [
          "messages"
        ],
        "summary": "List messages",
        "operationId": "list_messages_projects__project_id__messages_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "conversation_ids",
            "in": "query",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Conversation Ids",
              "minItems": 1
            },
            "description": "Match conversation IDs. Repeat the parameter for multiple values, up to 100. Required on every page of message results."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "source_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source Id"
            },
            "description": "Exact external provider ID, as returned by this resource."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_MessageSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "conversations.read",
          "messages.read"
        ],
        "description": "Stored message text, internal notes and reply/forward context. Lists require 1–100 conversation IDs. Messages sort by conversation ID, timestamp, then message ID; missing legacy timestamps come first. Text may contain personal data even without `contacts.read`.\n\n**Required permissions:** `conversations.read` and `messages.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\" \\\n  --data-urlencode 'conversation_ids=CONVERSATION_ID' \\\n  --data-urlencode 'limit=50'"
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    params={\"conversation_ids\": \"CONVERSATION_ID\", \"limit\": 50},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/messages/{resource_id}": {
      "get": {
        "tags": [
          "messages"
        ],
        "summary": "Get message",
        "operationId": "get_messages_projects__project_id__messages__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageSummary"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "conversations.read",
          "messages.read"
        ],
        "description": "Stored message text, internal notes and reply/forward context. Lists require 1–100 conversation IDs. Messages sort by conversation ID, timestamp, then message ID; missing legacy timestamps come first. Text may contain personal data even without `contacts.read`.\n\n**Required permissions:** `conversations.read` and `messages.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/evaluations": {
      "get": {
        "tags": [
          "evaluations"
        ],
        "summary": "List evaluations",
        "operationId": "list_evaluations_projects__project_id__evaluations_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "conversation_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Conversation Ids"
            },
            "description": "Match conversation IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            },
            "description": "Exact saved status; evaluations filter on `result_status`."
          },
          {
            "name": "published",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Published"
            },
            "description": "Filter on publication to agents. Omit to include both published and unpublished cards."
          },
          {
            "name": "approved",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Approved"
            },
            "description": "Filter on effective approval. Approval is independent of publication."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "evaluated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Evaluated From"
            },
            "description": "Inclusive lower bound on evaluated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "evaluated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Evaluated To"
            },
            "description": "Exclusive upper bound on evaluated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "published_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Published From"
            },
            "description": "Inclusive lower bound on published_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "published_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Published To"
            },
            "description": "Exclusive upper bound on published_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_EvaluationSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluations.read"
        ],
        "description": "Published and unpublished evaluation cards, with effective reviewed scores and original model scores. Approval and publication are independent. A conversation can have several cards. Each card has its own agent attribution and keeps its ID until deletion.\n\n**Required permissions:** `evaluations.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/evaluations/{resource_id}": {
      "get": {
        "tags": [
          "evaluations"
        ],
        "summary": "Get evaluation",
        "operationId": "get_evaluations_projects__project_id__evaluations__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvaluationDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluations.read"
        ],
        "description": "Published and unpublished evaluation cards, with effective reviewed scores and original model scores. Approval and publication are independent. A conversation can have several cards. Each card has its own agent attribution and keeps its ID until deletion.\n\n**Required permissions:** `evaluations.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/reviews": {
      "get": {
        "tags": [
          "reviews"
        ],
        "summary": "List reviews",
        "operationId": "list_reviews_projects__project_id__reviews_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "conversation_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Conversation Ids"
            },
            "description": "Match conversation IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "evaluation_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Evaluation Id"
            },
            "description": "Match a linked evaluation card ID."
          },
          {
            "name": "approved",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Approved"
            },
            "description": "Filter on effective approval. Approval is independent of publication."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ReviewSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluations.read"
        ],
        "description": "Saved review decisions, comments and overrides. Reviews can survive a deleted evaluation with `evaluation_id: null`; API reads never attach them to replacement cards. Manager filters exclude reviews whose card was deleted.\n\n**Required permissions:** `evaluations.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/reviews/{resource_id}": {
      "get": {
        "tags": [
          "reviews"
        ],
        "summary": "Get review",
        "operationId": "get_reviews_projects__project_id__reviews__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluations.read"
        ],
        "description": "Saved review decisions, comments and overrides. Reviews can survive a deleted evaluation with `evaluation_id: null`; API reads never attach them to replacement cards. Manager filters exclude reviews whose card was deleted.\n\n**Required permissions:** `evaluations.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/attribute-results": {
      "get": {
        "tags": [
          "attribute-results"
        ],
        "summary": "List attribute results",
        "operationId": "list_attribute_results_projects__project_id__attribute_results_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "conversation_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Conversation Ids"
            },
            "description": "Match conversation IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "attribute_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attribute Id"
            },
            "description": "Match an attribute definition ID."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_AttributeResultSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluations.read"
        ],
        "description": "Extracted conversation attributes, including effective review overrides and original model values. Category history remains available after a category is deleted.\n\n**Required permissions:** `evaluations.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/attribute-results/{resource_id}": {
      "get": {
        "tags": [
          "attribute-results"
        ],
        "summary": "Get attribute result",
        "operationId": "get_attribute_results_projects__project_id__attribute_results__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttributeResultDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluations.read"
        ],
        "description": "Extracted conversation attributes, including effective review overrides and original model values. Category history remains available after a category is deleted.\n\n**Required permissions:** `evaluations.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/appeals": {
      "get": {
        "tags": [
          "appeals"
        ],
        "summary": "List appeals",
        "operationId": "list_appeals_projects__project_id__appeals_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "conversation_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Conversation Ids"
            },
            "description": "Match conversation IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "evaluation_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Evaluation Id"
            },
            "description": "Match a linked evaluation card ID."
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            },
            "description": "Exact saved status; evaluations filter on `result_status`."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_AppealSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "appeals.read"
        ],
        "description": "Appeals in every state. Detail adds comments and appealed items. Appeals can survive a deleted card with `evaluation_id: null`; manager filters exclude these detached appeals.\n\n**Required permissions:** `appeals.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/appeals/{resource_id}": {
      "get": {
        "tags": [
          "appeals"
        ],
        "summary": "Get appeal",
        "operationId": "get_appeals_projects__project_id__appeals__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppealDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "appeals.read"
        ],
        "description": "Appeals in every state. Detail adds comments and appealed items. Appeals can survive a deleted card with `evaluation_id: null`; manager filters exclude these detached appeals.\n\n**Required permissions:** `appeals.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/alerts": {
      "get": {
        "tags": [
          "alerts"
        ],
        "summary": "List alerts",
        "operationId": "list_alerts_projects__project_id__alerts_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "conversation_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Conversation Ids"
            },
            "description": "Match conversation IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "manager_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Manager Ids"
            },
            "description": "Match agent IDs, up to 100. Messages use their author; evaluations, reviews and appeals use card attribution; other conversation resources use conversation attribution. Detached reviews and appeals have unknown attribution and do not match."
          },
          {
            "name": "alert_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Alert Id"
            },
            "description": "Match an alert definition ID."
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            },
            "description": "Exact saved status; evaluations filter on `result_status`."
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "triggered_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Triggered From"
            },
            "description": "Inclusive lower bound on triggered_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "triggered_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Triggered To"
            },
            "description": "Exclusive upper bound on triggered_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_AlertSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "alerts.read"
        ],
        "description": "Conversation alerts in all states: `active`, `pending_approval` and `read`. Includes the saved condition and matched-value snapshots. An alert identifies neither a responsible agent nor an evaluation card. Full evaluations need `evaluations.read`.\n\n**Required permissions:** `alerts.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/alerts/{resource_id}": {
      "get": {
        "tags": [
          "alerts"
        ],
        "summary": "Get alert",
        "operationId": "get_alerts_projects__project_id__alerts__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertSummary"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "alerts.read"
        ],
        "description": "Conversation alerts in all states: `active`, `pending_approval` and `read`. Includes the saved condition and matched-value snapshots. An alert identifies neither a responsible agent nor an evaluation card. Full evaluations need `evaluations.read`.\n\n**Required permissions:** `alerts.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/alert-definitions": {
      "get": {
        "tags": [
          "alert-definitions"
        ],
        "summary": "List alert definitions",
        "operationId": "list_alert_definitions_projects__project_id__alert_definitions_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "attribute_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attribute Id"
            },
            "description": "Match an attribute definition ID."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_AlertDefinition_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "alerts.read"
        ],
        "description": "Configured alert conditions and severity, including soft-deleted definitions kept in history.\n\n**Required permissions:** `alerts.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/alert-definitions/{resource_id}": {
      "get": {
        "tags": [
          "alert-definitions"
        ],
        "summary": "Get alert definition",
        "operationId": "get_alert_definitions_projects__project_id__alert_definitions__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertDefinition"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "alerts.read"
        ],
        "description": "Configured alert conditions and severity, including soft-deleted definitions kept in history.\n\n**Required permissions:** `alerts.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/criteria": {
      "get": {
        "tags": [
          "criteria"
        ],
        "summary": "List criteria",
        "operationId": "list_criteria_projects__project_id__criteria_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_CriterionSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "criteria.read"
        ],
        "description": "Evaluation criteria and score ranges. Detail includes grading instructions.\n\n**Required permissions:** `criteria.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/criteria/{resource_id}": {
      "get": {
        "tags": [
          "criteria"
        ],
        "summary": "Get criterion",
        "operationId": "get_criteria_projects__project_id__criteria__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CriterionDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "criteria.read"
        ],
        "description": "Evaluation criteria and score ranges. Detail includes grading instructions.\n\n**Required permissions:** `criteria.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/attributes": {
      "get": {
        "tags": [
          "attributes"
        ],
        "summary": "List attributes",
        "operationId": "list_attributes_projects__project_id__attributes_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_AttributeSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "attributes.read"
        ],
        "description": "Attribute definitions, extraction settings and categories.\n\n**Required permissions:** `attributes.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/attributes/{resource_id}": {
      "get": {
        "tags": [
          "attributes"
        ],
        "summary": "Get attribute",
        "operationId": "get_attributes_projects__project_id__attributes__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttributeDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "attributes.read"
        ],
        "description": "Attribute definitions, extraction settings and categories.\n\n**Required permissions:** `attributes.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/evaluation-tags": {
      "get": {
        "tags": [
          "evaluation-tags"
        ],
        "summary": "List evaluation tags",
        "operationId": "list_evaluation_tags_projects__project_id__evaluation_tags_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_EvaluationTag_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluation_tags.read"
        ],
        "description": "Project evaluation tags, including their visibility and assignment settings.\n\n**Required permissions:** `evaluation_tags.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluation-tags' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluation-tags\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/evaluation-tags/{resource_id}": {
      "get": {
        "tags": [
          "evaluation-tags"
        ],
        "summary": "Get evaluation tag",
        "operationId": "get_evaluation_tags_projects__project_id__evaluation_tags__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvaluationTag"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "evaluation_tags.read"
        ],
        "description": "Project evaluation tags, including their visibility and assignment settings.\n\n**Required permissions:** `evaluation_tags.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluation-tags/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluation-tags/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/rules": {
      "get": {
        "tags": [
          "rules"
        ],
        "summary": "List rules",
        "operationId": "list_rules_projects__project_id__rules_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_RuleSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "rules.read"
        ],
        "description": "Project instructions, their enabled state and the evaluation outputs they apply to.\n\n**Required permissions:** `rules.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/rules/{resource_id}": {
      "get": {
        "tags": [
          "rules"
        ],
        "summary": "Get rule",
        "operationId": "get_rules_projects__project_id__rules__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "rules.read"
        ],
        "description": "Project instructions, their enabled state and the evaluation outputs they apply to.\n\n**Required permissions:** `rules.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/knowledge-base": {
      "get": {
        "tags": [
          "knowledge-base"
        ],
        "summary": "List knowledge base",
        "operationId": "list_knowledge_base_projects__project_id__knowledge_base_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_KnowledgeSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "knowledge_base.read"
        ],
        "description": "Reference documents. Detail includes extracted text, not the original binary file.\n\n**Required permissions:** `knowledge_base.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/knowledge-base/{resource_id}": {
      "get": {
        "tags": [
          "knowledge-base"
        ],
        "summary": "Get knowledge-base document",
        "operationId": "get_knowledge_base_projects__project_id__knowledge_base__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "knowledge_base.read"
        ],
        "description": "Reference documents. Detail includes extracted text, not the original binary file.\n\n**Required permissions:** `knowledge_base.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/notification-rules": {
      "get": {
        "tags": [
          "notification-rules"
        ],
        "summary": "List notification rules",
        "operationId": "list_notification_rules_projects__project_id__notification_rules_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_NotificationRule_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "notifications.read"
        ],
        "description": "Alert and appeal subscriptions: recipients, selected managers (or all managers), event type and trigger conditions. These settings do not describe reporting lines or publication routing.\n\n**Required permissions:** `notifications.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/notification-rules/{resource_id}": {
      "get": {
        "tags": [
          "notification-rules"
        ],
        "summary": "Get notification rule",
        "operationId": "get_notification_rules_projects__project_id__notification_rules__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationRule"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "notifications.read"
        ],
        "description": "Alert and appeal subscriptions: recipients, selected managers (or all managers), event type and trigger conditions. These settings do not describe reporting lines or publication routing.\n\n**Required permissions:** `notifications.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/notification-recipients": {
      "get": {
        "tags": [
          "notification-recipients"
        ],
        "summary": "List notification recipients",
        "operationId": "list_notification_recipients_projects__project_id__notification_recipients_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          },
          {
            "name": "ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "title": "Ids"
            },
            "description": "Match resource IDs. Repeat the parameter for multiple values, up to 100."
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            },
            "description": "Inclusive lower bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            },
            "description": "Exclusive upper bound on created_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated From"
            },
            "description": "Inclusive lower bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "updated_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Updated To"
            },
            "description": "Exclusive upper bound on updated_at. ISO 8601 with Z or an offset.",
            "example": "2026-10-01T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_NotificationRecipient_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "notifications.read"
        ],
        "description": "Saved notification recipients and linked user IDs. Email and Telegram handles additionally require `contacts.read`. A saved recipient is not proof of current project access or channel ownership; check both before using these settings to deliver data yourself.\n\n**Required permissions:** `notifications.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/notification-recipients/{resource_id}": {
      "get": {
        "tags": [
          "notification-recipients"
        ],
        "summary": "Get notification recipient",
        "operationId": "get_notification_recipients_projects__project_id__notification_recipients__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationRecipient"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "notifications.read"
        ],
        "description": "Saved notification recipients and linked user IDs. Email and Telegram handles additionally require `contacts.read`. A saved recipient is not proof of current project access or channel ownership; check both before using these settings to deliver data yourself.\n\n**Required permissions:** `notifications.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/flows": {
      "get": {
        "tags": [
          "flows"
        ],
        "summary": "List flows",
        "operationId": "flows_projects__project_id__flows_get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            },
            "description": "Maximum page size: 1–100, default 50. No total count is calculated."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4096
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            },
            "description": "Opaque `next_cursor` from the previous page. Keep the same project, resource and filters. Continue until `next_cursor` is null, even if a page is empty. You may change `limit`."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_FlowSummary_"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "flows.read"
        ],
        "description": "Expected conversation flows. Detail includes steps and instructions. Lists support only `limit` and `cursor`. Ambiguous legacy project prefixes return 409.\n\n**Required permissions:** `flows.read`.\n\n[Pagination and filters](/docs/api#/section/pagination-and-filters).",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    },
    "/projects/{project_id}/flows/{resource_id}": {
      "get": {
        "tags": [
          "flows"
        ],
        "summary": "Get flow",
        "operationId": "flow_detail_projects__project_id__flows__resource_id__get",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            },
            "description": "ID of a project granted to this integration. Get it from `GET /projects`."
          },
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            },
            "description": "Resource ID from this project's list endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowDetail"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid cursor, unsupported filter or missing message conversation IDs."
                  }
                }
              }
            },
            "description": "Invalid cursor, unsupported filter or missing message conversation IDs."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Missing, invalid, retired or revoked API key."
                  }
                }
              }
            },
            "description": "Missing, invalid, retired or revoked API key."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Project is granted, but a required permission is missing."
                  }
                }
              }
            },
            "description": "Project is granted, but a required permission is missing."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Project or resource is absent or outside this integration's grants."
                  }
                }
              }
            },
            "description": "Project or resource is absent or outside this integration's grants."
          },
          "405": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 405,
                    "message": "Method is not supported. This API accepts GET requests only."
                  }
                }
              }
            },
            "description": "Method is not supported. This API accepts GET requests only."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 409,
                    "message": "Legacy flow storage has an ambiguous project prefix; contact support."
                  }
                }
              }
            },
            "description": "Legacy flow storage has an ambiguous project prefix; contact support."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 422,
                    "message": "Invalid parameter type, range or unknown parameter."
                  }
                }
              }
            },
            "description": "Invalid parameter type, range or unknown parameter."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
                  }
                }
              }
            },
            "description": "Integration or company rate limit. Wait the Retry-After seconds before retrying.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Unexpected server error."
                  }
                }
              }
            },
            "description": "Unexpected server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Database is busy; retry with bounded backoff."
                  }
                }
              }
            },
            "description": "Database is busy; retry with bounded backoff."
          }
        },
        "x-required-scopes": [
          "flows.read"
        ],
        "description": "Expected conversation flows. Detail includes steps and instructions. Lists support only `limit` and `cursor`. Ambiguous legacy project prefixes return 409.\n\n**Required permissions:** `flows.read`.",
        "x-codeSamples": [
          {
            "lang": "curl",
            "label": "curl",
            "source": "curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows/RESOURCE_ID' \\\n  -H \"Authorization: Bearer $QUALITEAM_API_KEY\""
          },
          {
            "lang": "Python",
            "source": "import os\nimport requests\n\nresponse = requests.get(\n    \"https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows/RESOURCE_ID\",\n    headers={\"Authorization\": f\"Bearer {os.environ['QUALITEAM_API_KEY']}\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Actor": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "title": "Actor"
      },
      "AlertDefinition": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "severity": {
            "type": "string",
            "title": "Severity"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          },
          "activation_behavior": {
            "type": "string",
            "title": "Activation Behavior"
          },
          "target_kind": {
            "type": "string",
            "title": "Target Kind"
          },
          "operator": {
            "type": "string",
            "title": "Operator"
          },
          "attribute_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attribute Id"
          },
          "category_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category Id"
          },
          "criterion_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Criterion Id"
          },
          "threshold_numeric": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold Numeric"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "severity",
          "is_active",
          "deleted_at",
          "activation_behavior",
          "target_kind",
          "operator",
          "attribute_id",
          "category_id",
          "criterion_id",
          "threshold_numeric"
        ],
        "title": "AlertDefinition"
      },
      "AlertNotificationData-Input": {
        "properties": {
          "type": {
            "type": "string",
            "const": "alert_fired",
            "title": "Type"
          },
          "conversations": {
            "items": {
              "$ref": "#/components/schemas/NotificationConversation"
            },
            "type": "array",
            "title": "Conversations"
          }
        },
        "type": "object",
        "required": [
          "type",
          "conversations"
        ],
        "title": "AlertNotificationData"
      },
      "AlertNotificationData-Output": {
        "properties": {
          "type": {
            "type": "string",
            "const": "alert_fired",
            "title": "Type"
          },
          "conversations": {
            "items": {
              "$ref": "#/components/schemas/NotificationConversation"
            },
            "type": "array",
            "title": "Conversations"
          }
        },
        "type": "object",
        "required": [
          "type",
          "conversations"
        ],
        "title": "AlertNotificationData"
      },
      "AlertSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "alert_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alert Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "alert_name_snapshot": {
            "type": "string",
            "title": "Alert Name Snapshot"
          },
          "severity_snapshot": {
            "type": "string",
            "title": "Severity Snapshot"
          },
          "target_kind_snapshot": {
            "type": "string",
            "title": "Target Kind Snapshot"
          },
          "target_name_snapshot": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Name Snapshot"
          },
          "target_attribute_id_snapshot": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Attribute Id Snapshot"
          },
          "target_criterion_id_snapshot": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Criterion Id Snapshot"
          },
          "condition_summary_snapshot": {
            "type": "string",
            "title": "Condition Summary Snapshot"
          },
          "matched_value_summary_snapshot": {
            "type": "string",
            "title": "Matched Value Summary Snapshot"
          },
          "triggered_at": {
            "type": "string",
            "format": "date-time",
            "title": "Triggered At",
            "description": "When the alert originally matched. Activation and read changes use updated_at."
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          },
          "read_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Read At"
          },
          "read_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "project_id",
          "conversation_id",
          "alert_id",
          "status",
          "alert_name_snapshot",
          "severity_snapshot",
          "target_kind_snapshot",
          "target_name_snapshot",
          "target_attribute_id_snapshot",
          "target_criterion_id_snapshot",
          "condition_summary_snapshot",
          "matched_value_summary_snapshot",
          "triggered_at",
          "updated_at",
          "read_at",
          "read_by"
        ],
        "title": "AlertSummary"
      },
      "ApiError": {
        "properties": {
          "code": {
            "type": "integer",
            "title": "Code"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "Human-readable explanation. Wording varies with the failure; handle errors by HTTP status code."
          }
        },
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "title": "ApiError"
      },
      "ApiErrorResponse": {
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ApiError"
          }
        },
        "type": "object",
        "required": [
          "error"
        ],
        "title": "ApiErrorResponse"
      },
      "AppealComment": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "author": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "content": {
            "type": "string",
            "title": "Content"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "author",
          "content"
        ],
        "title": "AppealComment"
      },
      "AppealCreatedNotificationData": {
        "properties": {
          "type": {
            "type": "string",
            "const": "appeal_created",
            "title": "Type"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "evaluation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Id"
          },
          "appeal_id": {
            "type": "string",
            "title": "Appeal Id"
          },
          "agent_name": {
            "type": "string",
            "title": "Agent Name"
          },
          "manager_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Manager Name"
          },
          "item_count": {
            "type": "integer",
            "title": "Item Count"
          }
        },
        "type": "object",
        "required": [
          "type",
          "conversation_id",
          "evaluation_id",
          "appeal_id",
          "agent_name",
          "manager_name",
          "item_count"
        ],
        "title": "AppealCreatedNotificationData"
      },
      "AppealDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "evaluation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "started_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "linked_reviewer": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "closed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "reopened_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reopened At"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/AppealItem-Output"
            },
            "type": "array",
            "title": "Items"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "conversation_id",
          "evaluation_id",
          "status",
          "started_by",
          "linked_reviewer",
          "closed_at",
          "reopened_at",
          "items"
        ],
        "title": "AppealDetail"
      },
      "AppealItem-Input": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "criteria_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Criteria Id"
          },
          "criterion_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Criterion Name"
          },
          "is_general": {
            "type": "boolean",
            "title": "Is General"
          },
          "agent_proposed_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Agent Proposed Score"
          },
          "accepted_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted Score"
          },
          "qc_decision": {
            "type": "string",
            "title": "Qc Decision"
          },
          "mistake_attribution": {
            "type": "string",
            "title": "Mistake Attribution"
          },
          "decided_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decided At"
          },
          "decided_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "comments": {
            "items": {
              "$ref": "#/components/schemas/AppealComment"
            },
            "type": "array",
            "title": "Comments"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "criteria_id",
          "criterion_name",
          "is_general",
          "agent_proposed_score",
          "accepted_score",
          "qc_decision",
          "mistake_attribution",
          "decided_at",
          "decided_by",
          "comments"
        ],
        "title": "AppealItem"
      },
      "AppealItem-Output": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "criteria_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Criteria Id"
          },
          "criterion_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Criterion Name"
          },
          "is_general": {
            "type": "boolean",
            "title": "Is General"
          },
          "agent_proposed_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Agent Proposed Score"
          },
          "accepted_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted Score"
          },
          "qc_decision": {
            "type": "string",
            "title": "Qc Decision"
          },
          "mistake_attribution": {
            "type": "string",
            "title": "Mistake Attribution"
          },
          "decided_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decided At"
          },
          "decided_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "comments": {
            "items": {
              "$ref": "#/components/schemas/AppealComment"
            },
            "type": "array",
            "title": "Comments"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "criteria_id",
          "criterion_name",
          "is_general",
          "agent_proposed_score",
          "accepted_score",
          "qc_decision",
          "mistake_attribution",
          "decided_at",
          "decided_by",
          "comments"
        ],
        "title": "AppealItem"
      },
      "AppealResolvedNotificationData": {
        "properties": {
          "type": {
            "type": "string",
            "const": "appeal_resolved",
            "title": "Type"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "evaluation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Id"
          },
          "appeal_id": {
            "type": "string",
            "title": "Appeal Id"
          },
          "agent_name": {
            "type": "string",
            "title": "Agent Name"
          },
          "manager_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Manager Name"
          },
          "outcome": {
            "type": "string",
            "title": "Outcome"
          },
          "accepted_count": {
            "type": "integer",
            "title": "Accepted Count"
          },
          "rejected_count": {
            "type": "integer",
            "title": "Rejected Count"
          },
          "closed_by_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed By Name"
          }
        },
        "type": "object",
        "required": [
          "type",
          "conversation_id",
          "evaluation_id",
          "appeal_id",
          "agent_name",
          "manager_name",
          "outcome",
          "accepted_count",
          "rejected_count",
          "closed_by_name"
        ],
        "title": "AppealResolvedNotificationData"
      },
      "AppealSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "evaluation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "started_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "linked_reviewer": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "closed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "reopened_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reopened At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "conversation_id",
          "evaluation_id",
          "status",
          "started_by",
          "linked_reviewer",
          "closed_at",
          "reopened_at"
        ],
        "title": "AppealSummary"
      },
      "AttributeDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "attribute_type": {
            "type": "string",
            "title": "Attribute Type"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          },
          "order": {
            "type": "integer",
            "title": "Order"
          },
          "show_seconds": {
            "type": "boolean",
            "title": "Show Seconds"
          },
          "allow_new_categories": {
            "type": "boolean",
            "title": "Allow New Categories"
          },
          "allow_no_options_match": {
            "type": "boolean",
            "title": "Allow No Options Match"
          },
          "allow_multiple_categories": {
            "type": "boolean",
            "title": "Allow Multiple Categories"
          },
          "max_selected_categories": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Selected Categories"
          },
          "run_after_evaluation": {
            "type": "boolean",
            "title": "Run After Evaluation"
          },
          "context_lookback_mode": {
            "type": "string",
            "title": "Context Lookback Mode"
          },
          "context_lookback_minutes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context Lookback Minutes"
          },
          "question": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Question"
          },
          "categories": {
            "items": {
              "$ref": "#/components/schemas/Category"
            },
            "type": "array",
            "title": "Categories"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "attribute_type",
          "is_active",
          "deleted_at",
          "order",
          "show_seconds",
          "allow_new_categories",
          "allow_no_options_match",
          "allow_multiple_categories",
          "max_selected_categories",
          "run_after_evaluation",
          "context_lookback_mode",
          "context_lookback_minutes",
          "question",
          "categories"
        ],
        "title": "AttributeDetail"
      },
      "AttributeResultDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "attribute_id": {
            "type": "string",
            "title": "Attribute Id"
          },
          "attribute_name": {
            "type": "string",
            "title": "Attribute Name"
          },
          "attribute_type": {
            "type": "string",
            "title": "Attribute Type"
          },
          "numeric_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Numeric Value"
          },
          "model_numeric_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Numeric Value",
            "description": "Original extracted numeric value, before review overrides."
          },
          "timezone_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone Name"
          },
          "timezone_offset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone Offset"
          },
          "model_timezone_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Timezone Name"
          },
          "model_timezone_offset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Timezone Offset"
          },
          "categories": {
            "items": {
              "$ref": "#/components/schemas/CategoryReference"
            },
            "type": "array",
            "title": "Categories"
          },
          "model_categories": {
            "items": {
              "$ref": "#/components/schemas/CategoryReference"
            },
            "type": "array",
            "title": "Model Categories",
            "description": "Original model category set, before review overrides."
          },
          "extracted_at": {
            "type": "string",
            "format": "date-time",
            "title": "Extracted At"
          },
          "explanation": {
            "type": "string",
            "title": "Explanation"
          },
          "message_references": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message References"
          }
        },
        "type": "object",
        "required": [
          "id",
          "conversation_id",
          "attribute_id",
          "attribute_name",
          "attribute_type",
          "numeric_value",
          "model_numeric_value",
          "timezone_name",
          "timezone_offset",
          "model_timezone_name",
          "model_timezone_offset",
          "categories",
          "model_categories",
          "extracted_at",
          "explanation",
          "message_references"
        ],
        "title": "AttributeResultDetail"
      },
      "AttributeResultSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "attribute_id": {
            "type": "string",
            "title": "Attribute Id"
          },
          "attribute_name": {
            "type": "string",
            "title": "Attribute Name"
          },
          "attribute_type": {
            "type": "string",
            "title": "Attribute Type"
          },
          "numeric_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Numeric Value"
          },
          "model_numeric_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Numeric Value",
            "description": "Original extracted numeric value, before review overrides."
          },
          "timezone_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone Name"
          },
          "timezone_offset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone Offset"
          },
          "model_timezone_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Timezone Name"
          },
          "model_timezone_offset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Timezone Offset"
          },
          "categories": {
            "items": {
              "$ref": "#/components/schemas/CategoryReference"
            },
            "type": "array",
            "title": "Categories"
          },
          "model_categories": {
            "items": {
              "$ref": "#/components/schemas/CategoryReference"
            },
            "type": "array",
            "title": "Model Categories",
            "description": "Original model category set, before review overrides."
          },
          "extracted_at": {
            "type": "string",
            "format": "date-time",
            "title": "Extracted At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "conversation_id",
          "attribute_id",
          "attribute_name",
          "attribute_type",
          "numeric_value",
          "model_numeric_value",
          "timezone_name",
          "timezone_offset",
          "model_timezone_name",
          "model_timezone_offset",
          "categories",
          "model_categories",
          "extracted_at"
        ],
        "title": "AttributeResultSummary"
      },
      "AttributeReview": {
        "properties": {
          "numeric_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Numeric Value"
          },
          "category_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category Ids"
          },
          "timezone_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone Name"
          },
          "timezone_offset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone Offset"
          },
          "timezone_name_set": {
            "type": "boolean",
            "title": "Timezone Name Set"
          },
          "timezone_offset_set": {
            "type": "boolean",
            "title": "Timezone Offset Set"
          }
        },
        "type": "object",
        "required": [
          "numeric_value",
          "category_ids",
          "timezone_name",
          "timezone_offset",
          "timezone_name_set",
          "timezone_offset_set"
        ],
        "title": "AttributeReview"
      },
      "AttributeSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "attribute_type": {
            "type": "string",
            "title": "Attribute Type"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          },
          "order": {
            "type": "integer",
            "title": "Order"
          },
          "show_seconds": {
            "type": "boolean",
            "title": "Show Seconds"
          },
          "allow_new_categories": {
            "type": "boolean",
            "title": "Allow New Categories"
          },
          "allow_no_options_match": {
            "type": "boolean",
            "title": "Allow No Options Match"
          },
          "allow_multiple_categories": {
            "type": "boolean",
            "title": "Allow Multiple Categories"
          },
          "max_selected_categories": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Selected Categories"
          },
          "run_after_evaluation": {
            "type": "boolean",
            "title": "Run After Evaluation"
          },
          "context_lookback_mode": {
            "type": "string",
            "title": "Context Lookback Mode"
          },
          "context_lookback_minutes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context Lookback Minutes"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "attribute_type",
          "is_active",
          "deleted_at",
          "order",
          "show_seconds",
          "allow_new_categories",
          "allow_no_options_match",
          "allow_multiple_categories",
          "max_selected_categories",
          "run_after_evaluation",
          "context_lookback_mode",
          "context_lookback_minutes"
        ],
        "title": "AttributeSummary"
      },
      "Category": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "attribute_id": {
            "type": "string",
            "title": "Attribute Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "is_no_options_match": {
            "type": "boolean",
            "title": "Is No Options Match"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "attribute_id",
          "name",
          "description",
          "status",
          "is_active",
          "is_no_options_match",
          "deleted_at"
        ],
        "title": "Category"
      },
      "CategoryReference": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "is_no_options_match": {
            "type": "boolean",
            "title": "Is No Options Match"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "status",
          "is_no_options_match",
          "deleted_at"
        ],
        "title": "CategoryReference"
      },
      "ConversationDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "source_id": {
            "type": "string",
            "title": "Source Id",
            "description": "External provider ID. Included in the resource's read permission."
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State"
          },
          "loaded_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loaded From",
            "description": "Beginning of the saved conversation coverage window."
          },
          "loaded_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loaded To",
            "description": "End of the saved conversation coverage window."
          },
          "reporting_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reporting Date",
            "description": "Reporting date in the project's timezone, based on the last in-window message or the coverage window end."
          },
          "reporting_timezone": {
            "type": "string",
            "title": "Reporting Timezone",
            "description": "Project timezone used to interpret reporting dates."
          },
          "attributed_manager_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Attributed Manager Ids"
          },
          "app_url": {
            "type": "string",
            "title": "App Url",
            "description": "Link to Qualiteam. Opening it requires a signed-in user with access to this project."
          },
          "evaluation_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Ids"
          },
          "alert_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alert Ids"
          },
          "evaluation_tag_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Tag Ids"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "source_id",
          "state",
          "loaded_from",
          "loaded_to",
          "reporting_date",
          "reporting_timezone",
          "attributed_manager_ids",
          "app_url"
        ],
        "title": "ConversationDetail"
      },
      "ConversationSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "source_id": {
            "type": "string",
            "title": "Source Id",
            "description": "External provider ID. Included in the resource's read permission."
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State"
          },
          "loaded_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loaded From",
            "description": "Beginning of the saved conversation coverage window."
          },
          "loaded_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loaded To",
            "description": "End of the saved conversation coverage window."
          },
          "reporting_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reporting Date",
            "description": "Reporting date in the project's timezone, based on the last in-window message or the coverage window end."
          },
          "reporting_timezone": {
            "type": "string",
            "title": "Reporting Timezone",
            "description": "Project timezone used to interpret reporting dates."
          },
          "attributed_manager_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Attributed Manager Ids"
          },
          "app_url": {
            "type": "string",
            "title": "App Url",
            "description": "Link to Qualiteam. Opening it requires a signed-in user with access to this project."
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "source_id",
          "state",
          "loaded_from",
          "loaded_to",
          "reporting_date",
          "reporting_timezone",
          "attributed_manager_ids",
          "app_url"
        ],
        "title": "ConversationSummary"
      },
      "CriterionDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "max_value": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Value"
          },
          "minimum_value": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Minimum Value"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Order"
          },
          "context_lookback_mode": {
            "type": "string",
            "title": "Context Lookback Mode"
          },
          "context_lookback_minutes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context Lookback Minutes"
          },
          "instruction": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instruction"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "max_value",
          "minimum_value",
          "is_active",
          "order",
          "context_lookback_mode",
          "context_lookback_minutes",
          "instruction"
        ],
        "title": "CriterionDetail"
      },
      "CriterionResult": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "criterion_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Criterion Id"
          },
          "criterion_key": {
            "type": "string",
            "title": "Criterion Key"
          },
          "criterion_name_snapshot": {
            "type": "string",
            "title": "Criterion Name Snapshot"
          },
          "criterion_order_snapshot": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Criterion Order Snapshot"
          },
          "score": {
            "type": "integer",
            "title": "Score"
          },
          "model_score": {
            "type": "integer",
            "title": "Model Score",
            "description": "Original immutable model score, before review overrides."
          },
          "min_score": {
            "type": "integer",
            "title": "Min Score"
          },
          "max_score": {
            "type": "integer",
            "title": "Max Score"
          },
          "explanation": {
            "type": "string",
            "title": "Explanation"
          },
          "message_references": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message References"
          }
        },
        "type": "object",
        "required": [
          "id",
          "criterion_id",
          "criterion_key",
          "criterion_name_snapshot",
          "criterion_order_snapshot",
          "score",
          "model_score",
          "min_score",
          "max_score",
          "explanation",
          "message_references"
        ],
        "title": "CriterionResult"
      },
      "CriterionReview": {
        "properties": {
          "score_override": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score Override"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          }
        },
        "type": "object",
        "required": [
          "score_override",
          "comment"
        ],
        "title": "CriterionReview"
      },
      "CriterionSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "max_value": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Value"
          },
          "minimum_value": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Minimum Value"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Order"
          },
          "context_lookback_mode": {
            "type": "string",
            "title": "Context Lookback Mode"
          },
          "context_lookback_minutes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context Lookback Minutes"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "max_value",
          "minimum_value",
          "is_active",
          "order",
          "context_lookback_mode",
          "context_lookback_minutes"
        ],
        "title": "CriterionSummary"
      },
      "EvaluationDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "topic": {
            "type": "string",
            "title": "Topic"
          },
          "result_status": {
            "type": "string",
            "title": "Result Status"
          },
          "criteria_scoring_mode": {
            "type": "string",
            "title": "Criteria Scoring Mode"
          },
          "addition_score_direction": {
            "type": "string",
            "title": "Addition Score Direction",
            "description": "Current project display setting. Changes score colors, never stored values."
          },
          "total_score": {
            "type": "integer",
            "title": "Total Score"
          },
          "total_min_score": {
            "type": "integer",
            "title": "Total Min Score"
          },
          "total_max_score": {
            "type": "integer",
            "title": "Total Max Score"
          },
          "evaluated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Evaluated At",
            "description": "When this evaluation was produced; distinct from publication and conversation coverage."
          },
          "attributed_manager_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Attributed Manager Ids"
          },
          "published_to_agents": {
            "type": "boolean",
            "title": "Published To Agents"
          },
          "published_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Published At",
            "description": "When this evaluation was published to agents."
          },
          "approved": {
            "type": "boolean",
            "title": "Approved"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "approved_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approved At"
          },
          "app_url": {
            "type": "string",
            "title": "App Url",
            "description": "Link to Qualiteam. Opening it requires a signed-in user with access to this project."
          },
          "llm_general_comment": {
            "type": "string",
            "title": "Llm General Comment"
          },
          "original_llm_general_comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Original Llm General Comment"
          },
          "criteria_results": {
            "items": {
              "$ref": "#/components/schemas/CriterionResult"
            },
            "type": "array",
            "title": "Criteria Results"
          },
          "published_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "reviewed_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "approved_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "review_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Review Id",
            "description": "Linked review ID, if ownership of the evaluation card is known."
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "conversation_id",
          "topic",
          "result_status",
          "criteria_scoring_mode",
          "addition_score_direction",
          "total_score",
          "total_min_score",
          "total_max_score",
          "evaluated_at",
          "attributed_manager_ids",
          "published_to_agents",
          "published_at",
          "approved",
          "reviewed_at",
          "approved_at",
          "app_url",
          "llm_general_comment",
          "original_llm_general_comment",
          "criteria_results",
          "published_by",
          "reviewed_by",
          "approved_by",
          "review_id"
        ],
        "title": "EvaluationDetail"
      },
      "EvaluationSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "topic": {
            "type": "string",
            "title": "Topic"
          },
          "result_status": {
            "type": "string",
            "title": "Result Status"
          },
          "criteria_scoring_mode": {
            "type": "string",
            "title": "Criteria Scoring Mode"
          },
          "addition_score_direction": {
            "type": "string",
            "title": "Addition Score Direction",
            "description": "Current project display setting. Changes score colors, never stored values."
          },
          "total_score": {
            "type": "integer",
            "title": "Total Score"
          },
          "total_min_score": {
            "type": "integer",
            "title": "Total Min Score"
          },
          "total_max_score": {
            "type": "integer",
            "title": "Total Max Score"
          },
          "evaluated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Evaluated At",
            "description": "When this evaluation was produced; distinct from publication and conversation coverage."
          },
          "attributed_manager_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Attributed Manager Ids"
          },
          "published_to_agents": {
            "type": "boolean",
            "title": "Published To Agents"
          },
          "published_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Published At",
            "description": "When this evaluation was published to agents."
          },
          "approved": {
            "type": "boolean",
            "title": "Approved"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "approved_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approved At"
          },
          "app_url": {
            "type": "string",
            "title": "App Url",
            "description": "Link to Qualiteam. Opening it requires a signed-in user with access to this project."
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "conversation_id",
          "topic",
          "result_status",
          "criteria_scoring_mode",
          "addition_score_direction",
          "total_score",
          "total_min_score",
          "total_max_score",
          "evaluated_at",
          "attributed_manager_ids",
          "published_to_agents",
          "published_at",
          "approved",
          "reviewed_at",
          "approved_at",
          "app_url"
        ],
        "title": "EvaluationSummary"
      },
      "EvaluationTag": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "visible_to_agents": {
            "type": "boolean",
            "title": "Visible To Agents"
          },
          "assignable_by_agents": {
            "type": "boolean",
            "title": "Assignable By Agents"
          },
          "assignable_by_qc_managers": {
            "type": "boolean",
            "title": "Assignable By Qc Managers"
          },
          "order": {
            "type": "integer",
            "title": "Order"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "is_active",
          "visible_to_agents",
          "assignable_by_agents",
          "assignable_by_qc_managers",
          "order",
          "deleted_at"
        ],
        "title": "EvaluationTag"
      },
      "FlowDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "steps": {
            "items": {
              "$ref": "#/components/schemas/FlowStep"
            },
            "type": "array",
            "title": "Steps"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "description",
          "is_active",
          "steps"
        ],
        "title": "FlowDetail"
      },
      "FlowStep": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "instruction": {
            "type": "string",
            "title": "Instruction"
          },
          "step_type": {
            "type": "string",
            "title": "Step Type"
          },
          "order": {
            "type": "integer",
            "title": "Order"
          },
          "classes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Classes"
          },
          "parent_node": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Node"
          }
        },
        "type": "object",
        "required": [
          "name",
          "instruction",
          "step_type",
          "order",
          "classes",
          "parent_node"
        ],
        "title": "FlowStep"
      },
      "FlowSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "description",
          "is_active"
        ],
        "title": "FlowSummary"
      },
      "KnowledgeDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "extracted_text": {
            "type": "string",
            "title": "Extracted Text"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "extracted_text"
        ],
        "title": "KnowledgeDetail"
      },
      "KnowledgeSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name"
        ],
        "title": "KnowledgeSummary"
      },
      "ManagerDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "source_id": {
            "type": "string",
            "title": "Source Id",
            "description": "External provider ID. Included in the resource's read permission."
          },
          "source_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Type"
          },
          "is_evaluated": {
            "type": "boolean",
            "title": "Is Evaluated"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email",
            "description": "Null unless contacts.read is granted and an email is stored."
          },
          "evaluation_instruction": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Instruction"
          },
          "evaluation_language": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Language"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "source_id",
          "source_type",
          "is_evaluated",
          "tags",
          "evaluation_instruction",
          "evaluation_language"
        ],
        "title": "ManagerDetail"
      },
      "ManagerSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "source_id": {
            "type": "string",
            "title": "Source Id",
            "description": "External provider ID. Included in the resource's read permission."
          },
          "source_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Type"
          },
          "is_evaluated": {
            "type": "boolean",
            "title": "Is Evaluated"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email",
            "description": "Null unless contacts.read is granted and an email is stored."
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "source_id",
          "source_type",
          "is_evaluated",
          "tags"
        ],
        "title": "ManagerSummary"
      },
      "MessageSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "source_id": {
            "type": "string",
            "title": "Source Id",
            "description": "External provider ID. Included in the resource's read permission."
          },
          "author_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Id"
          },
          "author_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Name"
          },
          "author_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Type"
          },
          "manager_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Manager Id"
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content"
          },
          "is_internal_note": {
            "type": "boolean",
            "title": "Is Internal Note",
            "description": "Whether this is a staff-only note in the source system."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "in_evaluation_window": {
            "type": "boolean",
            "title": "In Evaluation Window",
            "description": "Whether this message's timestamp belongs to the conversation's evaluation window."
          },
          "is_reply": {
            "type": "boolean",
            "title": "Is Reply"
          },
          "reply": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ReplyContext"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stored quoted-message context. It is not an additional message or evaluation activity."
          },
          "is_forwarded": {
            "type": "boolean",
            "title": "Is Forwarded"
          },
          "forwarded_from_author_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forwarded From Author Name"
          }
        },
        "type": "object",
        "required": [
          "id",
          "conversation_id",
          "source_id",
          "author_id",
          "author_name",
          "author_type",
          "manager_id",
          "content",
          "is_internal_note",
          "created_at",
          "in_evaluation_window",
          "is_reply",
          "reply",
          "is_forwarded",
          "forwarded_from_author_name"
        ],
        "title": "MessageSummary"
      },
      "NotificationAlert": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "title": "NotificationAlert"
      },
      "NotificationCondition": {
        "properties": {
          "min_severity": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Severity"
          },
          "alert_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alert Ids"
          }
        },
        "type": "object",
        "title": "NotificationCondition"
      },
      "NotificationConversation": {
        "properties": {
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "topic": {
            "type": "string",
            "title": "Topic"
          },
          "chat_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Chat Name"
          },
          "manager_names": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Manager Names"
          },
          "alerts": {
            "items": {
              "$ref": "#/components/schemas/NotificationAlert"
            },
            "type": "array",
            "title": "Alerts"
          }
        },
        "type": "object",
        "required": [
          "conversation_id",
          "topic",
          "chat_name",
          "manager_names",
          "alerts"
        ],
        "title": "NotificationConversation"
      },
      "NotificationDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "event_type": {
            "$ref": "#/components/schemas/NotificationEventType"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "recipient": {
            "$ref": "#/components/schemas/NotificationRecipientIdentity"
          },
          "managers": {
            "items": {
              "$ref": "#/components/schemas/Actor"
            },
            "type": "array",
            "title": "Managers"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "text": {
            "type": "string",
            "title": "Text"
          },
          "links": {
            "items": {
              "$ref": "#/components/schemas/NotificationLink"
            },
            "type": "array",
            "title": "Links"
          },
          "data": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AlertNotificationData-Output"
              },
              {
                "$ref": "#/components/schemas/AppealCreatedNotificationData"
              },
              {
                "$ref": "#/components/schemas/AppealResolvedNotificationData"
              },
              {
                "$ref": "#/components/schemas/PublishedNotificationData"
              }
            ],
            "title": "Data",
            "discriminator": {
              "propertyName": "type",
              "mapping": {
                "agent_conversations_published": "#/components/schemas/PublishedNotificationData",
                "alert_fired": "#/components/schemas/AlertNotificationData-Output",
                "appeal_created": "#/components/schemas/AppealCreatedNotificationData",
                "appeal_resolved": "#/components/schemas/AppealResolvedNotificationData"
              }
            }
          }
        },
        "type": "object",
        "required": [
          "id",
          "project_id",
          "event_type",
          "created_at",
          "recipient",
          "managers",
          "title",
          "text",
          "links",
          "data"
        ],
        "title": "NotificationDetail"
      },
      "NotificationEventType": {
        "type": "string",
        "enum": [
          "alert_fired",
          "appeal_created",
          "appeal_resolved",
          "agent_conversations_published"
        ],
        "title": "NotificationEventType"
      },
      "NotificationFeedPage": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/NotificationSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          },
          "resume_cursor": {
            "type": "string",
            "title": "Resume Cursor"
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor",
          "resume_cursor"
        ],
        "title": "NotificationFeedPage"
      },
      "NotificationLink": {
        "properties": {
          "label": {
            "type": "string",
            "title": "Label"
          },
          "url": {
            "type": "string",
            "title": "Url"
          }
        },
        "type": "object",
        "required": [
          "label",
          "url"
        ],
        "title": "NotificationLink"
      },
      "NotificationRecipient": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "source_user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source User Id"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email",
            "description": "Null unless contacts.read is granted and an email is stored."
          },
          "telegram_handle": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Telegram Handle",
            "description": "Null unless contacts.read is granted and a handle is stored. A handle does not verify the current owner or a delivery destination."
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "source_user_id"
        ],
        "title": "NotificationRecipient"
      },
      "NotificationRecipientIdentity": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "kind": {
            "type": "string",
            "enum": [
              "recipient",
              "agent"
            ],
            "title": "Kind"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email",
            "description": "Null unless contacts.read is granted and an email is stored."
          },
          "telegram_handle": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Telegram Handle",
            "description": "Null unless contacts.read is granted and a handle is stored. A handle does not verify the current owner or a delivery destination."
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind",
          "name",
          "user_id",
          "email",
          "telegram_handle"
        ],
        "title": "NotificationRecipientIdentity"
      },
      "NotificationRule": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "event_type": {
            "type": "string",
            "title": "Event Type"
          },
          "all_managers": {
            "type": "boolean",
            "title": "All Managers"
          },
          "manager_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Manager Ids"
          },
          "recipient_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Recipient Ids"
          },
          "condition": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NotificationCondition"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "event_type",
          "all_managers",
          "manager_ids",
          "recipient_ids",
          "condition"
        ],
        "title": "NotificationRule"
      },
      "NotificationSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "event_type": {
            "$ref": "#/components/schemas/NotificationEventType"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "recipient": {
            "$ref": "#/components/schemas/NotificationRecipientIdentity"
          },
          "managers": {
            "items": {
              "$ref": "#/components/schemas/Actor"
            },
            "type": "array",
            "title": "Managers"
          },
          "title": {
            "type": "string",
            "title": "Title"
          }
        },
        "type": "object",
        "required": [
          "id",
          "project_id",
          "event_type",
          "created_at",
          "recipient",
          "managers",
          "title"
        ],
        "title": "NotificationSummary"
      },
      "Page_AlertDefinition_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AlertDefinition"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[AlertDefinition]"
      },
      "Page_AlertSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AlertSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[AlertSummary]"
      },
      "Page_AppealSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AppealSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[AppealSummary]"
      },
      "Page_AttributeResultSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AttributeResultSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[AttributeResultSummary]"
      },
      "Page_AttributeSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AttributeSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[AttributeSummary]"
      },
      "Page_ConversationSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ConversationSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[ConversationSummary]"
      },
      "Page_CriterionSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/CriterionSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[CriterionSummary]"
      },
      "Page_EvaluationSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/EvaluationSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[EvaluationSummary]"
      },
      "Page_EvaluationTag_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/EvaluationTag"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[EvaluationTag]"
      },
      "Page_FlowSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/FlowSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[FlowSummary]"
      },
      "Page_KnowledgeSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/KnowledgeSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[KnowledgeSummary]"
      },
      "Page_ManagerSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ManagerSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[ManagerSummary]"
      },
      "Page_MessageSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/MessageSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[MessageSummary]"
      },
      "Page_NotificationRecipient_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/NotificationRecipient"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[NotificationRecipient]"
      },
      "Page_NotificationRule_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/NotificationRule"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[NotificationRule]"
      },
      "Page_ProjectSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ProjectSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[ProjectSummary]"
      },
      "Page_ReviewSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ReviewSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[ReviewSummary]"
      },
      "Page_RuleSummary_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/RuleSummary"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as cursor for the next page. Null means the scan is complete. An empty data array can still have a next cursor when filtering by managers."
          }
        },
        "type": "object",
        "required": [
          "data",
          "next_cursor"
        ],
        "title": "Page[RuleSummary]"
      },
      "ProjectDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "slug": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Slug"
          },
          "reporting_timezone": {
            "type": "string",
            "title": "Reporting Timezone",
            "description": "Project timezone used to interpret reporting dates."
          },
          "criteria_scoring_mode": {
            "type": "string",
            "title": "Criteria Scoring Mode"
          },
          "addition_score_direction": {
            "type": "string",
            "title": "Addition Score Direction",
            "description": "Current project display setting. Changes score colors, never stored values."
          },
          "subtraction_min_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtraction Min Score"
          },
          "subtraction_max_score": {
            "type": "integer",
            "title": "Subtraction Max Score"
          },
          "language": {
            "type": "string",
            "title": "Language"
          },
          "app_url": {
            "type": "string",
            "title": "App Url",
            "description": "Link to Qualiteam. Opening it requires a signed-in user with access to this project."
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "per_agent_evaluation_enabled": {
            "type": "boolean",
            "title": "Per Agent Evaluation Enabled"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "name",
          "slug",
          "reporting_timezone",
          "criteria_scoring_mode",
          "addition_score_direction",
          "subtraction_min_score",
          "subtraction_max_score",
          "language",
          "app_url",
          "description",
          "per_agent_evaluation_enabled"
        ],
        "title": "ProjectDetail"
      },
      "ProjectSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "slug": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Slug"
          },
          "reporting_timezone": {
            "type": "string",
            "title": "Reporting Timezone",
            "description": "Project timezone used to interpret reporting dates."
          },
          "criteria_scoring_mode": {
            "type": "string",
            "title": "Criteria Scoring Mode"
          },
          "addition_score_direction": {
            "type": "string",
            "title": "Addition Score Direction",
            "description": "Current project display setting. Changes score colors, never stored values."
          },
          "subtraction_min_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtraction Min Score"
          },
          "subtraction_max_score": {
            "type": "integer",
            "title": "Subtraction Max Score"
          },
          "language": {
            "type": "string",
            "title": "Language"
          },
          "app_url": {
            "type": "string",
            "title": "App Url",
            "description": "Link to Qualiteam. Opening it requires a signed-in user with access to this project."
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "name",
          "slug",
          "reporting_timezone",
          "criteria_scoring_mode",
          "addition_score_direction",
          "subtraction_min_score",
          "subtraction_max_score",
          "language",
          "app_url"
        ],
        "title": "ProjectSummary"
      },
      "PublishedNotificationData": {
        "properties": {
          "type": {
            "type": "string",
            "const": "agent_conversations_published",
            "title": "Type"
          },
          "agent_name": {
            "type": "string",
            "title": "Agent Name"
          },
          "conversation_count": {
            "type": "integer",
            "title": "Conversation Count"
          },
          "conversation_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Conversation Ids"
          },
          "evaluation_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Evaluation Ids"
          }
        },
        "type": "object",
        "required": [
          "type",
          "agent_name",
          "conversation_count",
          "conversation_ids",
          "evaluation_ids"
        ],
        "title": "PublishedNotificationData"
      },
      "ReplyContext": {
        "properties": {
          "author_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Name"
          },
          "author_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Type"
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content"
          }
        },
        "type": "object",
        "required": [
          "author_name",
          "author_type",
          "content"
        ],
        "title": "ReplyContext"
      },
      "ReviewDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "evaluation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Id"
          },
          "approved": {
            "type": "boolean",
            "title": "Approved"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "approved_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approved At"
          },
          "reviewed_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "approved_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "general_comment": {
            "type": "string",
            "title": "General Comment"
          },
          "criteria_reviews": {
            "additionalProperties": {
              "$ref": "#/components/schemas/CriterionReview"
            },
            "type": "object",
            "title": "Criteria Reviews"
          },
          "attribute_reviews": {
            "additionalProperties": {
              "$ref": "#/components/schemas/AttributeReview"
            },
            "type": "object",
            "title": "Attribute Reviews"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "conversation_id",
          "evaluation_id",
          "approved",
          "reviewed_at",
          "approved_at",
          "reviewed_by",
          "approved_by",
          "general_comment",
          "criteria_reviews",
          "attribute_reviews"
        ],
        "title": "ReviewDetail"
      },
      "ReviewSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "conversation_id": {
            "type": "string",
            "title": "Conversation Id"
          },
          "evaluation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evaluation Id"
          },
          "approved": {
            "type": "boolean",
            "title": "Approved"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "approved_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approved At"
          },
          "reviewed_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          },
          "approved_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Actor"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "conversation_id",
          "evaluation_id",
          "approved",
          "reviewed_at",
          "approved_at",
          "reviewed_by",
          "approved_by"
        ],
        "title": "ReviewSummary"
      },
      "RuleDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "order": {
            "type": "integer",
            "title": "Order"
          },
          "targets": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Targets"
          },
          "instruction": {
            "type": "string",
            "title": "Instruction"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "is_active",
          "order",
          "targets",
          "instruction"
        ],
        "title": "RuleDetail"
      },
      "RuleSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active"
          },
          "order": {
            "type": "integer",
            "title": "Order"
          },
          "targets": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Targets"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "updated_at",
          "project_id",
          "name",
          "is_active",
          "order",
          "targets"
        ],
        "title": "RuleSummary"
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "http",
        "description": "Company API key: qt_live_<id>.<secret>",
        "scheme": "bearer"
      }
    }
  },
  "tags": [
    {
      "name": "notifications",
      "x-displayName": "Notifications",
      "description": "Ready notifications for your own delivery integration. One record per recipient, shared across email and Telegram. History lasts 90 days after appearing in the feed. Existing notification rules and publication settings determine which events are created. Detail includes text, recipients and links; no conversation or evaluation requests are needed. Read all pages with next_cursor, then save resume_cursor for the next poll. Recipient access is rechecked on every read. Channel delivery does not consume the feed."
    },
    {
      "name": "projects",
      "x-displayName": "Projects",
      "description": "Granted projects, reporting timezone and score settings. Any grant allows project metadata. Shared instructions in `description` require `rules.read` or `criteria.read`."
    },
    {
      "name": "managers",
      "x-displayName": "Managers",
      "description": "Support agents and their provider IDs, including agents no longer evaluated. Email requires the additional `contacts.read` permission."
    },
    {
      "name": "conversations",
      "x-displayName": "Conversations",
      "description": "Saved conversations, coverage windows and agent attribution, including history from disabled sources. Detail includes evaluation, alert and tag IDs only with their respective read permissions."
    },
    {
      "name": "messages",
      "x-displayName": "Messages",
      "description": "Stored message text, internal notes and reply/forward context. Lists require 1–100 conversation IDs. Messages sort by conversation ID, timestamp, then message ID; missing legacy timestamps come first. Text may contain personal data even without `contacts.read`."
    },
    {
      "name": "evaluations",
      "x-displayName": "Evaluations",
      "description": "Published and unpublished evaluation cards, with effective reviewed scores and original model scores. Approval and publication are independent. A conversation can have several cards. Each card has its own agent attribution and keeps its ID until deletion."
    },
    {
      "name": "reviews",
      "x-displayName": "Reviews",
      "description": "Saved review decisions, comments and overrides. Reviews can survive a deleted evaluation with `evaluation_id: null`; API reads never attach them to replacement cards. Manager filters exclude reviews whose card was deleted."
    },
    {
      "name": "attribute-results",
      "x-displayName": "Attribute results",
      "description": "Extracted conversation attributes, including effective review overrides and original model values. Category history remains available after a category is deleted."
    },
    {
      "name": "appeals",
      "x-displayName": "Appeals",
      "description": "Appeals in every state. Detail adds comments and appealed items. Appeals can survive a deleted card with `evaluation_id: null`; manager filters exclude these detached appeals."
    },
    {
      "name": "alerts",
      "x-displayName": "Alerts",
      "description": "Conversation alerts in all states: `active`, `pending_approval` and `read`. Includes the saved condition and matched-value snapshots. An alert identifies neither a responsible agent nor an evaluation card. Full evaluations need `evaluations.read`."
    },
    {
      "name": "alert-definitions",
      "x-displayName": "Alert definitions",
      "description": "Configured alert conditions and severity, including soft-deleted definitions kept in history."
    },
    {
      "name": "notification-rules",
      "x-displayName": "Notification rules",
      "description": "Alert and appeal subscriptions: recipients, selected managers (or all managers), event type and trigger conditions. These settings do not describe reporting lines or publication routing."
    },
    {
      "name": "notification-recipients",
      "x-displayName": "Notification recipients",
      "description": "Saved notification recipients and linked user IDs. Email and Telegram handles additionally require `contacts.read`. A saved recipient is not proof of current project access or channel ownership; check both before using these settings to deliver data yourself."
    },
    {
      "name": "criteria",
      "x-displayName": "Criteria",
      "description": "Evaluation criteria and score ranges. Detail includes grading instructions."
    },
    {
      "name": "attributes",
      "x-displayName": "Attributes",
      "description": "Attribute definitions, extraction settings and categories."
    },
    {
      "name": "evaluation-tags",
      "x-displayName": "Evaluation tags",
      "description": "Project evaluation tags, including their visibility and assignment settings."
    },
    {
      "name": "flows",
      "x-displayName": "Flows",
      "description": "Expected conversation flows. Detail includes steps and instructions. Lists support only `limit` and `cursor`. Ambiguous legacy project prefixes return 409."
    },
    {
      "name": "rules",
      "x-displayName": "Rules",
      "description": "Project instructions, their enabled state and the evaluation outputs they apply to."
    },
    {
      "name": "knowledge-base",
      "x-displayName": "Knowledge base",
      "description": "Reference documents. Detail includes extracted text, not the original binary file."
    }
  ],
  "x-tagGroups": [
    {
      "name": "Alerts & notifications",
      "tags": [
        "notifications",
        "alerts",
        "alert-definitions",
        "notification-rules",
        "notification-recipients"
      ]
    },
    {
      "name": "Projects & conversations",
      "tags": [
        "projects",
        "managers",
        "conversations",
        "messages"
      ]
    },
    {
      "name": "Evaluation results",
      "tags": [
        "evaluations",
        "reviews",
        "attribute-results",
        "appeals"
      ]
    },
    {
      "name": "Project configuration",
      "tags": [
        "criteria",
        "attributes",
        "evaluation-tags",
        "flows",
        "rules",
        "knowledge-base"
      ]
    }
  ]
}
