Qualiteam API reference (1.0.0)
Read projects, conversations, evaluation results and settings from your own integration. All endpoints are read-only.
Base URL: https://qualiteam.ai/api/v1
Authentication
Create an API key in Company → API Access. Send it in the Authorization header:
export QUALITEAM_API_KEY='your-key-from-api-access'
curl --fail-with-body 'https://qualiteam.ai/api/v1/projects' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Keep 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.
Resources and permissions
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.
Each resource has list and detail endpoints:
GET /projects/{project_id}/{resource}
GET /projects/{project_id}/{resource}/{resource_id}
| Resource | Required permission |
|---|---|
managers |
managers.read |
conversations |
conversations.read |
messages |
messages.read and conversations.read |
evaluations, reviews, attribute-results |
evaluations.read |
appeals |
appeals.read |
alerts, alert-definitions |
alerts.read |
criteria |
criteria.read |
attributes |
attributes.read |
evaluation-tags |
evaluation_tags.read |
flows |
flows.read |
rules |
rules.read |
knowledge-base |
knowledge_base.read |
notification-rules, notification-recipients |
notifications.read |
notifications |
notification_events.read |
Each 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.
Resource 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.
Conversation 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.
Project 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.
Pagination and filters
Lists return:
{
"data": [{ "id": "example-resource-id" }],
"next_cursor": "opaque-continuation-token"
}
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.
With 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.
Results 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.
| Filter | Where supported |
|---|---|
ids |
Database resources and projects |
conversation_ids |
Conversations and their child resources |
manager_ids |
Managers; message authors; card attribution for evaluations, reviews and appeals; conversation attribution for conversations, attribute results and alerts |
evaluation_id |
Reviews, appeals |
attribute_id |
Attribute results, alert definitions |
alert_id |
Alerts |
source_id |
Managers, conversations, messages |
status |
Evaluations (result_status), appeals, alerts |
state |
Conversations |
published |
Evaluations |
approved |
Evaluations, reviews |
created_from, created_to |
Resources with created_at |
updated_from, updated_to |
Resources with updated_at |
evaluated_from, evaluated_to |
Evaluations |
published_from, published_to |
Evaluations |
triggered_from, triggered_to |
Alerts |
Projects support ids, limit, cursor; flows support limit, cursor. Most lists are compact. Detail endpoints add criteria instructions, knowledge text, appeal comments and per-criterion results. Message lists include text for batch transcript reads; notification lists include the full notification content.
Date 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.
Message 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.
curl --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages' \
-H "Authorization: Bearer $QUALITEAM_API_KEY" \
--data-urlencode 'conversation_ids=CONVERSATION_ID' \
--data-urlencode 'limit=100'
Evaluation and history semantics
Scores and dates
scoreandtotal_scoreare the effective reviewed values; each criterion'smodel_scorekeeps the original model value. Use the card's scoring mode, min/max and the project's currentaddition_score_directionto interpret scores. Direction affects display only.attribute-resultsbelong 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.- Approval and publication are separate.
evaluated_atrecords evaluation,published_atrecords publication, andloaded_from/loaded_todefine conversation coverage. As in reporting,reporting_dateuses the last in-window message (or window end) and project timezone.
Agents and deleted cards
- 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. - Reviews and appeals use their own card's agents. Without a card, their attribution is unknown:
manager_idsfilters exclude them, but unfiltered lists include them. - IDs stay stable until deletion. A replacement card gets a new ID. Reviews and appeals can survive with
evaluation_id: nullas conversation history; API reads never attach them to a replacement. - An approved review without a card can keep the evaluation card's
approvedtrue if the conversation has exactly one card and no card-linked review. Ownership remains unknown, soreview_id,approved_atand reviewer references stay null. With multiple cards, it approves none.
Alerts and notifications
- 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_atrecords the original hit; activation/read changes useupdated_at. - Notification rules list alert/appeal subscriptions, recipients and manager IDs. They do not describe reporting lines or publication-to-team-lead routing.
- Saved recipients may be ineligible for built-in delivery. Before sending project data, verify recipient access and channel ownership. The saved
telegram_handlemay have changed owners and does not verify a Telegram destination.
app_url opens the relevant application screen and requires a user login with project access.
Notification feed
Use GET https://qualiteam.ai/api/v1/projects/{project_id}/notifications to read notifications that Qualiteam has already prepared for recipients. Each item includes the recipient, managers, conversations, title, text, links and event data, ready to send through your messenger. No per-notification request is needed. GET https://qualiteam.ai/api/v1/projects/{project_id}/notifications/{id} returns the same content when you need a single notification.
| Field | Meaning |
|---|---|
recipient |
Who this notification was prepared for. |
managers |
The related support agents (manager means agent in this API), with their agent tags. |
conversations |
All related conversations, their chat tags and manager_ids referencing managers[].id. Present for every event type. |
data |
Event-specific facts, such as fired alerts or appeal outcomes. Use the top-level conversations for the common conversation references. |
title, text, links |
Prepared message content for your messenger. |
There are three separate kinds of tags. Chat tags and agent tags are string lists. Evaluation tags have IDs in evaluation_tag_ids, with definitions from evaluation-tags and their own evaluation_tags.read permission.
In notifications, conversations[].chat_tags and managers[].tags are saved at creation. Changing source tags does not rewrite them. In contrast, GET https://qualiteam.ai/api/v1/projects/{project_id}/conversations (and its detail endpoint) returns current chat_tags, and managers[].name in notifications is the current agent name. Telegram, TimelinesAI and Helpshift chat tags are supported; Intercom, Zendesk and missing chat metadata return [].
Both notification tag fields require only notification_events.read; no additional managers.read or conversations.read is needed. Chat tags hidden from a linked recipient are omitted at creation and hidden again if access is later revoked. Tags omitted at creation do not appear later when access is restored. Manual recipients follow their administrator-configured access. Old notifications still include related conversation and agent IDs, but their tag arrays are []. Tag fields are never null; an empty array can mean no tags, unavailable tags, hidden tags or a pre-feature notification.
Ask 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.
The 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. Your integration handles delivery to your messenger; the API has no delivery acknowledgement endpoint.
- At first connection, choose and persist
created_from, for example2026-10-21T09:00:00Z. Read the list with this date; optionally addevent_typeorrecipient_id. - Process the complete notifications in
data, using notification IDs to prevent duplicates. - Follow
next_cursoruntil it is null, including through empty pages. Save your checkpoint only after processing its page or storing its notifications in your durable delivery queue. - Save the final
resume_cursor; use it ascursoron the next poll and after restarts, with the same filters and the originalcreated_from.
created_from includes its boundary; created_to excludes it. Both filter created_at and require an ISO 8601 timestamp with a timezone. Equivalent offsets are normalized to UTC. Invalid dates return 422, a reversed range returns 400, and equal boundaries return an empty page. Changing filters with a cursor returns 400.
For continuous polling, omit created_to. For a bounded export, supply both dates, for example created_from=2026-10-21T00:00:00Z and created_to=2026-10-22T00:00:00Z. Without dates, reading starts at the oldest retained feed position. Existing consumers can keep using their date-less cursors. To add date filters, restart without a cursor and deduplicate against saved notification IDs.
The order remains feed_sequence ASC: the order notifications appear in the feed. A late-committing notification may have an earlier created_at; it still arrives after your saved cursor if it matches your fixed date range. Do not replace the cursor with the last notification's timestamp or move created_from forward on each poll.
A page with one notification looks like this (IDs and cursor are illustrative):
{
"data": [{
"id": "notification-123",
"project_id": "project-123",
"event_type": "alert_fired",
"created_at": "2026-10-21T09:00:00Z",
"recipient": {
"id": "recipient-123", "kind": "recipient", "name": "Team lead",
"user_id": null, "email": null, "telegram_handle": null
},
"managers": [{"id": "manager-123", "name": "Alex", "tags": ["affiliate"]}],
"conversations": [{
"conversation_id": "conversation-123",
"manager_ids": ["manager-123"],
"chat_tags": ["weekly_review", "priority"]
}],
"title": "Notifications from Support",
"text": "Support chat: Low score. View conversation (https://qualiteam.ai/conversation/conversation-123)",
"links": [{
"label": "View conversation",
"url": "https://qualiteam.ai/conversation/conversation-123"
}],
"data": {
"type": "alert_fired",
"conversations": [{
"conversation_id": "conversation-123", "topic": "Payment question",
"chat_name": "Support chat", "manager_names": ["Alex"],
"alerts": [{"id": "alert-123", "name": "Low score"}]
}]
}
}],
"next_cursor": null,
"resume_cursor": "opaque-resume-token"
}
Committed 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 using the same filters and deduplicate against saved IDs. An expired history window cannot be recovered through the API.
Access 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.
For 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. conversations[].manager_ids uses the saved attribution of permitted evaluation cards and can be empty, including for detached appeals; it does not identify an agent responsible for an alert. Publication references include all conversations, even when the message text shows only a preview. If an agent profile has no name, notifications return agent_name: "" in their event data.
Polling notifications
Call this function on each poll with your persisted created_from and saved cursor, or None for the cursor on the first run. Keep the same date after restarts. Supply enqueue_once(id, notification) to store the full notification in your durable delivery queue, deduplicated by ID, and save_cursor(cursor) to persist the checkpoint. Send queued messages through your messenger separately. If storing a page fails, its checkpoint is not advanced and the next poll can retry it.
import os
import requests
def poll_notifications(project_id, created_from, cursor, enqueue_once, save_cursor):
base = "https://qualiteam.ai/api/v1"
params = {"limit": 100, "created_from": created_from}
if cursor is not None:
params["cursor"] = cursor
with requests.Session() as session:
session.headers["Authorization"] = f"Bearer {os.environ['QUALITEAM_API_KEY']}"
while True:
response = session.get(
f"{base}/projects/{project_id}/notifications",
params=params, timeout=30,
)
response.raise_for_status()
page = response.json()
for notification in page["data"]:
enqueue_once(notification["id"], notification)
cursor = page["next_cursor"] or page["resume_cursor"]
save_cursor(cursor)
if page["next_cursor"] is None:
return cursor
params["cursor"] = cursor
Match conversations to agents
Use IDs to associate each conversation with its agents and their tags. No further API calls are needed:
def conversations_with_agents(notification):
agents = {agent["id"]: agent for agent in notification["managers"]}
for conversation in notification["conversations"]:
yield conversation, [agents[agent_id] for agent_id in conversation["manager_ids"]]
Polling evaluations
Read currently published evaluations within an evaluation-time range from your server. Your integration handles message composition and delivery.
import os
import requests
base = "https://qualiteam.ai/api/v1"
project_id = "PROJECT_ID"
params = {
"published": "true",
"evaluated_from": "2026-10-01T00:00:00Z",
"evaluated_to": "2026-10-08T00:00:00Z",
"limit": 100,
}
headers = {"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"}
with requests.Session() as session:
while True:
response = session.get(
f"{base}/projects/{project_id}/evaluations",
headers=headers, params=params, timeout=30,
)
response.raise_for_status()
page = response.json()
for evaluation in page["data"]:
print(evaluation["id"], evaluation["total_score"], evaluation["app_url"])
if page["next_cursor"] is None:
break
params["cursor"] = page["next_cursor"]
The 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.
Limits and errors
Limits 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.
For 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.
| HTTP status | Meaning |
|---|---|
| 400 | Invalid cursor, unsupported filters or missing message conversation IDs |
| 401 | Missing, invalid, expired or revoked API key |
| 403 | Project is granted, but a required scope is missing |
| 404 | Resource/project is absent or outside the grant |
| 405 | Unsupported write operation |
| 409 | Legacy flow storage has an ambiguous project prefix; contact support |
| 410 | Notification cursor expired; restart without a cursor to read retained history |
| 422 | Invalid parameter type, range or unknown parameter |
| 429 | Integration or company rate limit |
| 503 | Database busy; retry shortly |
Errors 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.
Versioning
/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.
Notifications
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. Each list item includes the full text, recipient, managers, conversations, links and event data, ready for your messenger without per-notification requests. Detail returns the same content for a single notification. Read all pages with next_cursor, then save resume_cursor for the next poll after processing the page or storing it in your durable delivery queue. Save created_from at first connection and keep it unchanged with each cursor, including after restarts. created_from is inclusive and created_to exclusive, both on created_at with a required timezone. Omit created_to for continuous polling; use both dates for a bounded export. Feed order is feed_sequence ASC (appearance order), not creation time: late commits can have an older created_at and still appear after your cursor if they match the date range. On 410, restart without a cursor using the same filters and deduplicate saved IDs. Recipient access is rechecked on every read. Channel delivery does not consume the feed. managers[].tags and conversations[].chat_tags are saved tag snapshots; conversations[].manager_ids links conversations to managers[].id without matching names or making extra requests. Older notifications keep their conversation/agent references with empty tag arrays. Only notification_events.read is needed for both tag types; hidden recipient chat tags remain hidden.
List notifications
GET https://qualiteam.ai/api/v1/projects/{project_id}/notifications
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. Each list item includes the full text, recipient, managers, conversations, links and event data, ready for your messenger without per-notification requests. Detail returns the same content for a single notification. Read all pages with next_cursor, then save resume_cursor for the next poll after processing the page or storing it in your durable delivery queue. Save created_from at first connection and keep it unchanged with each cursor, including after restarts. created_from is inclusive and created_to exclusive, both on created_at with a required timezone. Omit created_to for continuous polling; use both dates for a bounded export. Feed order is feed_sequence ASC (appearance order), not creation time: late commits can have an older created_at and still appear after your cursor if they match the date range. On 410, restart without a cursor using the same filters and deduplicate saved IDs. Recipient access is rechecked on every read. Channel delivery does not consume the feed. managers[].tags and conversations[].chat_tags are saved tag snapshots; conversations[].manager_ids links conversations to managers[].id without matching names or making extra requests. Older notifications keep their conversation/agent references with empty tag arrays. Only notification_events.read is needed for both tag types; hidden recipient chat tags remain hidden.
Required permissions: notification_events.read.
Required permissions: notification_events.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullUse 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. |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
event_type | query | No | Any of: (NotificationEventType; null)
anyOf variant: nullFilter by alert_fired, appeal_created, appeal_resolved or agent_conversations_published. |
recipient_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullRecipient ID from a notification. Publication notifications use the recipient's platform user ID. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
410
Notification cursor is older than the retained history. Restart without a cursor and deduplicate saved IDs.
application/json
{
"error": {
"code": 410,
"message": "Notification cursor is older than the retained history. Restart without a cursor and deduplicate saved IDs."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get notification
GET https://qualiteam.ai/api/v1/projects/{project_id}/notifications/{notification_id}
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. Each list item includes the full text, recipient, managers, conversations, links and event data, ready for your messenger without per-notification requests. Detail returns the same content for a single notification. Read all pages with next_cursor, then save resume_cursor for the next poll after processing the page or storing it in your durable delivery queue. Save created_from at first connection and keep it unchanged with each cursor, including after restarts. created_from is inclusive and created_to exclusive, both on created_at with a required timezone. Omit created_to for continuous polling; use both dates for a bounded export. Feed order is feed_sequence ASC (appearance order), not creation time: late commits can have an older created_at and still appear after your cursor if they match the date range. On 410, restart without a cursor using the same filters and deduplicate saved IDs. Recipient access is rechecked on every read. Channel delivery does not consume the feed. managers[].tags and conversations[].chat_tags are saved tag snapshots; conversations[].manager_ids links conversations to managers[].id without matching names or making extra requests. Older notifications keep their conversation/agent references with empty tag arrays. Only notification_events.read is needed for both tag types; hidden recipient chat tags remain hidden.
Required permissions: notification_events.read.
Required permissions: notification_events.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
notification_id | path | Yes | stringNotification ID from this project's feed. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications/NOTIFICATION_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notifications/NOTIFICATION_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Projects
Granted projects, reporting timezone and score settings. Any grant allows project metadata. Shared instructions in description require rules.read or criteria.read.
List projects
GET https://qualiteam.ai/api/v1/projects
Granted projects, reporting timezone and score settings. Any grant allows project metadata. Shared instructions in description require rules.read or criteria.read.
Required permissions: Any grant on the project.
Required permissions: Any project grant.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get project
GET https://qualiteam.ai/api/v1/projects/{project_id}
Granted projects, reporting timezone and score settings. Any grant allows project metadata. Shared instructions in description require rules.read or criteria.read.
Required permissions: Any grant on the project.
Required permissions: Any project grant.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Managers
Support agents and their provider IDs, including agents no longer evaluated. Manager means support agent. tags contains the agent's current string tags. Email requires the additional contacts.read permission.
List managers
GET https://qualiteam.ai/api/v1/projects/{project_id}/managers
Support agents and their provider IDs, including agents no longer evaluated. Manager means support agent. tags contains the agent's current string tags. Email requires the additional contacts.read permission.
Required permissions: managers.read.
Required permissions: managers.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
source_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullExact external provider ID, as returned by this resource. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get manager
GET https://qualiteam.ai/api/v1/projects/{project_id}/managers/{resource_id}
Support agents and their provider IDs, including agents no longer evaluated. Manager means support agent. tags contains the agent's current string tags. Email requires the additional contacts.read permission.
Required permissions: managers.read.
Required permissions: managers.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/managers/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Conversations
Saved conversations, coverage windows and agent attribution, including history from disabled sources. Lists and detail include current chat_tags with conversations.read. Telegram, TimelinesAI (effective labels and local tags) and Helpshift are supported; other sources or missing metadata return []. Detail includes evaluation, alert and evaluation-tag IDs only with their respective read permissions.
List conversations
GET https://qualiteam.ai/api/v1/projects/{project_id}/conversations
Saved conversations, coverage windows and agent attribution, including history from disabled sources. Lists and detail include current chat_tags with conversations.read. Telegram, TimelinesAI (effective labels and local tags) and Helpshift are supported; other sources or missing metadata return []. Detail includes evaluation, alert and evaluation-tag IDs only with their respective read permissions.
Required permissions: conversations.read.
Required permissions: conversations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
conversation_ids | query | No | array · items: string
maxItems: Item schema: stringMatch conversation IDs. Repeat the parameter for multiple values, up to 100. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
source_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullExact external provider ID, as returned by this resource. |
state | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullExact saved conversation state. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get conversation
GET https://qualiteam.ai/api/v1/projects/{project_id}/conversations/{resource_id}
Saved conversations, coverage windows and agent attribution, including history from disabled sources. Lists and detail include current chat_tags with conversations.read. Telegram, TimelinesAI (effective labels and local tags) and Helpshift are supported; other sources or missing metadata return []. Detail includes evaluation, alert and evaluation-tag IDs only with their respective read permissions.
Required permissions: conversations.read.
Required permissions: conversations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/conversations/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Messages
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.
List messages
GET https://qualiteam.ai/api/v1/projects/{project_id}/messages
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.
Required permissions: conversations.read and messages.read.
Required permissions: conversations.read, messages.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
conversation_ids | query | Yes | array · items: string
minItems: maxItems: Item schema: stringMatch conversation IDs. Repeat the parameter for multiple values, up to 100. Required on every page of message results. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
source_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullExact external provider ID, as returned by this resource. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages' \
-H "Authorization: Bearer $QUALITEAM_API_KEY" \
--data-urlencode 'conversation_ids=CONVERSATION_ID' \
--data-urlencode 'limit=50'
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
params={"conversation_ids": "CONVERSATION_ID", "limit": 50},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get message
GET https://qualiteam.ai/api/v1/projects/{project_id}/messages/{resource_id}
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.
Required permissions: conversations.read and messages.read.
Required permissions: conversations.read, messages.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/messages/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Evaluations
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.
List evaluations
GET https://qualiteam.ai/api/v1/projects/{project_id}/evaluations
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.
Required permissions: evaluations.read.
Required permissions: evaluations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
conversation_ids | query | No | array · items: string
maxItems: Item schema: stringMatch conversation IDs. Repeat the parameter for multiple values, up to 100. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
status | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullExact saved status; evaluations filter on |
published | query | No | Any of: (boolean; null)
anyOf variant:
booleananyOf variant: nullFilter on publication to agents. Omit to include both published and unpublished cards. |
approved | query | No | Any of: (boolean; null)
anyOf variant:
booleananyOf variant: nullFilter on effective approval. Approval is independent of publication. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
evaluated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on evaluated_at. ISO 8601 with Z or an offset.
|
evaluated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on evaluated_at. ISO 8601 with Z or an offset.
|
published_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on published_at. ISO 8601 with Z or an offset.
|
published_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on published_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get evaluation
GET https://qualiteam.ai/api/v1/projects/{project_id}/evaluations/{resource_id}
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.
Required permissions: evaluations.read.
Required permissions: evaluations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/evaluations/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Reviews
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.
List reviews
GET https://qualiteam.ai/api/v1/projects/{project_id}/reviews
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.
Required permissions: evaluations.read.
Required permissions: evaluations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
conversation_ids | query | No | array · items: string
maxItems: Item schema: stringMatch conversation IDs. Repeat the parameter for multiple values, up to 100. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
evaluation_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullMatch a linked evaluation card ID. |
approved | query | No | Any of: (boolean; null)
anyOf variant:
booleananyOf variant: nullFilter on effective approval. Approval is independent of publication. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get review
GET https://qualiteam.ai/api/v1/projects/{project_id}/reviews/{resource_id}
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.
Required permissions: evaluations.read.
Required permissions: evaluations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/reviews/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Attribute results
Extracted conversation attributes, including effective review overrides and original model values. Category history remains available after a category is deleted.
List attribute results
GET https://qualiteam.ai/api/v1/projects/{project_id}/attribute-results
Extracted conversation attributes, including effective review overrides and original model values. Category history remains available after a category is deleted.
Required permissions: evaluations.read.
Required permissions: evaluations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
conversation_ids | query | No | array · items: string
maxItems: Item schema: stringMatch conversation IDs. Repeat the parameter for multiple values, up to 100. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
attribute_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullMatch an attribute definition ID. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get attribute result
GET https://qualiteam.ai/api/v1/projects/{project_id}/attribute-results/{resource_id}
Extracted conversation attributes, including effective review overrides and original model values. Category history remains available after a category is deleted.
Required permissions: evaluations.read.
Required permissions: evaluations.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attribute-results/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Appeals
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.
List appeals
GET https://qualiteam.ai/api/v1/projects/{project_id}/appeals
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.
Required permissions: appeals.read.
Required permissions: appeals.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
conversation_ids | query | No | array · items: string
maxItems: Item schema: stringMatch conversation IDs. Repeat the parameter for multiple values, up to 100. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
evaluation_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullMatch a linked evaluation card ID. |
status | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullExact saved status; evaluations filter on |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get appeal
GET https://qualiteam.ai/api/v1/projects/{project_id}/appeals/{resource_id}
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.
Required permissions: appeals.read.
Required permissions: appeals.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/appeals/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Alerts
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.
List alerts
GET https://qualiteam.ai/api/v1/projects/{project_id}/alerts
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.
Required permissions: alerts.read.
Required permissions: alerts.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
conversation_ids | query | No | array · items: string
maxItems: Item schema: stringMatch conversation IDs. Repeat the parameter for multiple values, up to 100. |
manager_ids | query | No | array · items: string
maxItems: Item schema: stringMatch 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. |
alert_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullMatch an alert definition ID. |
status | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullExact saved status; evaluations filter on |
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
triggered_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on triggered_at. ISO 8601 with Z or an offset.
|
triggered_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on triggered_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get alert
GET https://qualiteam.ai/api/v1/projects/{project_id}/alerts/{resource_id}
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.
Required permissions: alerts.read.
Required permissions: alerts.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alerts/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Alert definitions
Configured alert conditions and severity, including soft-deleted definitions kept in history.
List alert definitions
GET https://qualiteam.ai/api/v1/projects/{project_id}/alert-definitions
Configured alert conditions and severity, including soft-deleted definitions kept in history.
Required permissions: alerts.read.
Required permissions: alerts.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
attribute_id | query | No | Any of: (string; null)
anyOf variant:
stringanyOf variant: nullMatch an attribute definition ID. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get alert definition
GET https://qualiteam.ai/api/v1/projects/{project_id}/alert-definitions/{resource_id}
Configured alert conditions and severity, including soft-deleted definitions kept in history.
Required permissions: alerts.read.
Required permissions: alerts.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/alert-definitions/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Notification rules
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.
List notification rules
GET https://qualiteam.ai/api/v1/projects/{project_id}/notification-rules
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.
Required permissions: notifications.read.
Required permissions: notifications.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get notification rule
GET https://qualiteam.ai/api/v1/projects/{project_id}/notification-rules/{resource_id}
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.
Required permissions: notifications.read.
Required permissions: notifications.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-rules/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Notification recipients
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.
List notification recipients
GET https://qualiteam.ai/api/v1/projects/{project_id}/notification-recipients
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.
Required permissions: notifications.read.
Required permissions: notifications.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get notification recipient
GET https://qualiteam.ai/api/v1/projects/{project_id}/notification-recipients/{resource_id}
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.
Required permissions: notifications.read.
Required permissions: notifications.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/notification-recipients/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Criteria
Evaluation criteria and score ranges. Detail includes grading instructions.
List criteria
GET https://qualiteam.ai/api/v1/projects/{project_id}/criteria
Evaluation criteria and score ranges. Detail includes grading instructions.
Required permissions: criteria.read.
Required permissions: criteria.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get criterion
GET https://qualiteam.ai/api/v1/projects/{project_id}/criteria/{resource_id}
Evaluation criteria and score ranges. Detail includes grading instructions.
Required permissions: criteria.read.
Required permissions: criteria.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/criteria/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Attributes
Attribute definitions, extraction settings and categories.
List attributes
GET https://qualiteam.ai/api/v1/projects/{project_id}/attributes
Attribute definitions, extraction settings and categories.
Required permissions: attributes.read.
Required permissions: attributes.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get attribute
GET https://qualiteam.ai/api/v1/projects/{project_id}/attributes/{resource_id}
Attribute definitions, extraction settings and categories.
Required permissions: attributes.read.
Required permissions: attributes.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/attributes/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Flows
Expected conversation flows. Detail includes steps and instructions. Lists support only limit and cursor. Ambiguous legacy project prefixes return 409.
List flows
GET https://qualiteam.ai/api/v1/projects/{project_id}/flows
Expected conversation flows. Detail includes steps and instructions. Lists support only limit and cursor. Ambiguous legacy project prefixes return 409.
Required permissions: flows.read.
Required permissions: flows.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get flow
GET https://qualiteam.ai/api/v1/projects/{project_id}/flows/{resource_id}
Expected conversation flows. Detail includes steps and instructions. Lists support only limit and cursor. Ambiguous legacy project prefixes return 409.
Required permissions: flows.read.
Required permissions: flows.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/flows/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Rules
Project instructions, their enabled state and the evaluation outputs they apply to.
List rules
GET https://qualiteam.ai/api/v1/projects/{project_id}/rules
Project instructions, their enabled state and the evaluation outputs they apply to.
Required permissions: rules.read.
Required permissions: rules.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get rule
GET https://qualiteam.ai/api/v1/projects/{project_id}/rules/{resource_id}
Project instructions, their enabled state and the evaluation outputs they apply to.
Required permissions: rules.read.
Required permissions: rules.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/rules/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Knowledge base
Reference documents. Detail includes extracted text, not the original binary file.
List knowledge base
GET https://qualiteam.ai/api/v1/projects/{project_id}/knowledge-base
Reference documents. Detail includes extracted text, not the original binary file.
Required permissions: knowledge_base.read.
Required permissions: knowledge_base.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
limit | query | No | integer
default: minimum: maximum: Maximum page size: 1–100, default 50. No total count is calculated. |
cursor | query | No | Any of: (string; null)
anyOf variant:
string
maxLength: anyOf variant: nullOpaque |
ids | query | No | array · items: string
maxItems: Item schema: stringMatch resource IDs. Repeat the parameter for multiple values, up to 100. |
created_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on created_at. ISO 8601 with Z or an offset.
|
created_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on created_at. ISO 8601 with Z or an offset.
|
updated_from | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullInclusive lower bound on updated_at. ISO 8601 with Z or an offset.
|
updated_to | query | No | Any of: (string · format: date-time; null)
anyOf variant:
string · format: date-timeanyOf variant: nullExclusive upper bound on updated_at. ISO 8601 with Z or an offset.
|
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Get knowledge-base document
GET https://qualiteam.ai/api/v1/projects/{project_id}/knowledge-base/{resource_id}
Reference documents. Detail includes extracted text, not the original binary file.
Required permissions: knowledge_base.read.
Required permissions: knowledge_base.read.
Parameters
| Name | Location | Required | Schema and description |
|---|---|---|---|
project_id | path | Yes | stringID of a project granted to this integration. Get it from |
resource_id | path | Yes | stringResource ID from this project's list endpoint. |
curl example
curl --fail-with-body --get 'https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base/RESOURCE_ID' \
-H "Authorization: Bearer $QUALITEAM_API_KEY"
Python example
import os
import requests
response = requests.get(
"https://qualiteam.ai/api/v1/projects/PROJECT_ID/knowledge-base/RESOURCE_ID",
headers={"Authorization": f"Bearer {os.environ['QUALITEAM_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Responses
200
Successful Response
application/json
400
Invalid cursor, unsupported filter or missing message conversation IDs.
application/json
{
"error": {
"code": 400,
"message": "Invalid cursor, unsupported filter or missing message conversation IDs."
}
}
401
Missing, invalid, retired or revoked API key.
application/json
{
"error": {
"code": 401,
"message": "Missing, invalid, retired or revoked API key."
}
}
403
Project is granted, but a required permission is missing.
application/json
{
"error": {
"code": 403,
"message": "Project is granted, but a required permission is missing."
}
}
404
Project or resource is absent or outside this integration's grants.
application/json
{
"error": {
"code": 404,
"message": "Project or resource is absent or outside this integration's grants."
}
}
405
Method is not supported. This API accepts GET requests only.
application/json
{
"error": {
"code": 405,
"message": "Method is not supported. This API accepts GET requests only."
}
}
409
Legacy flow storage has an ambiguous project prefix; contact support.
application/json
{
"error": {
"code": 409,
"message": "Legacy flow storage has an ambiguous project prefix; contact support."
}
}
422
Invalid parameter type, range or unknown parameter.
application/json
{
"error": {
"code": 422,
"message": "Invalid parameter type, range or unknown parameter."
}
}
429
Integration or company rate limit. Wait the Retry-After seconds before retrying.
Response headers
Retry-AfterintegerSeconds to wait before retrying.
application/json
{
"error": {
"code": 429,
"message": "Integration or company rate limit. Wait the Retry-After seconds before retrying."
}
}
500
Unexpected server error.
application/json
{
"error": {
"code": 500,
"message": "Unexpected server error."
}
}
503
Database is busy; retry with bounded backoff.
application/json
{
"error": {
"code": 503,
"message": "Database is busy; retry with bounded backoff."
}
}
Response schemas
Actor
object
id— requiredstringname— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
AlertDefinition
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringseverity— requiredstringis_active— requiredbooleandeleted_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null activation_behavior— requiredstringtarget_kind— requiredstringoperator— requiredstringattribute_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null category_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null criterion_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null threshold_numeric— required- Any of: (
number;null)anyOf variant:numberanyOf variant:null
AlertNotificationData-Input
object
type— requiredstringconst:
alert_firedconversations— requiredarray· items: NotificationConversation
AlertNotificationData-Output
object
type— requiredstringconst:
alert_firedconversations— requiredarray· items: NotificationConversation
AlertSummary
object
id— requiredstringproject_id— requiredstringconversation_id— requiredstringalert_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null status— requiredstringalert_name_snapshot— requiredstringseverity_snapshot— requiredstringtarget_kind_snapshot— requiredstringtarget_name_snapshot— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null target_attribute_id_snapshot— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null target_criterion_id_snapshot— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null condition_summary_snapshot— requiredstringmatched_value_summary_snapshot— requiredstringtriggered_at— requiredstring· format:date-timeWhen the alert originally matched. Activation and read changes use updated_at.
updated_at— requiredstring· format:date-timeread_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null read_by— required- Any of: (Actor;
null)anyOf variant:null
ApiError
object
code— requiredintegermessage— requiredstringHuman-readable explanation. Wording varies with the failure; handle errors by HTTP status code.
ApiErrorResponse
object
error— required- ApiError
AppealComment
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null author— required- Any of: (Actor;
null)anyOf variant:null content— requiredstring
AppealCreatedNotificationData
object
type— requiredstringconst:
appeal_createdconversation_id— requiredstringevaluation_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null appeal_id— requiredstringagent_name— requiredstringmanager_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null item_count— requiredinteger
AppealDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringconversation_id— requiredstringevaluation_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null status— requiredstringstarted_by— required- Any of: (Actor;
null)anyOf variant:null linked_reviewer— required- Any of: (Actor;
null)anyOf variant:null closed_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null reopened_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null items— requiredarray· items: AppealItem-Output
AppealItem-Input
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null criteria_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null criterion_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null is_general— requiredbooleanagent_proposed_score— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null accepted_score— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null qc_decision— requiredstringmistake_attribution— requiredstringdecided_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null decided_by— required- Any of: (Actor;
null)anyOf variant:null comments— requiredarray· items: AppealComment
AppealItem-Output
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null criteria_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null criterion_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null is_general— requiredbooleanagent_proposed_score— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null accepted_score— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null qc_decision— requiredstringmistake_attribution— requiredstringdecided_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null decided_by— required- Any of: (Actor;
null)anyOf variant:null comments— requiredarray· items: AppealComment
AppealResolvedNotificationData
object
type— requiredstringconst:
appeal_resolvedconversation_id— requiredstringevaluation_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null appeal_id— requiredstringagent_name— requiredstringmanager_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null outcome— requiredstringaccepted_count— requiredintegerrejected_count— requiredintegerclosed_by_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
AppealSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringconversation_id— requiredstringevaluation_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null status— requiredstringstarted_by— required- Any of: (Actor;
null)anyOf variant:null linked_reviewer— required- Any of: (Actor;
null)anyOf variant:null closed_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null reopened_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null
AttributeDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringattribute_type— requiredstringis_active— requiredbooleandeleted_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null order— requiredintegershow_seconds— requiredbooleanallow_new_categories— requiredbooleanallow_no_options_match— requiredbooleanallow_multiple_categories— requiredbooleanmax_selected_categories— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null run_after_evaluation— requiredbooleancontext_lookback_mode— requiredstringcontext_lookback_minutes— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null question— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null categories— requiredarray· items: Category
AttributeResultDetail
object
id— requiredstringconversation_id— requiredstringattribute_id— requiredstringattribute_name— requiredstringattribute_type— requiredstringnumeric_value— required- Any of: (
number;null)anyOf variant:numberanyOf variant:null model_numeric_value— required- Any of: (
number;null)Original extracted numeric value, before review overrides.
anyOf variant:numberanyOf variant:null timezone_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null timezone_offset— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null model_timezone_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null model_timezone_offset— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null categories— requiredarray· items: CategoryReferencemodel_categories— requiredarray· items: CategoryReferenceOriginal model category set, before review overrides.
extracted_at— requiredstring· format:date-timeexplanation— requiredstringmessage_references— required- Any of: (
object;null)anyOf variant:objectAdditional properties:stringanyOf variant:null
AttributeResultSummary
object
id— requiredstringconversation_id— requiredstringattribute_id— requiredstringattribute_name— requiredstringattribute_type— requiredstringnumeric_value— required- Any of: (
number;null)anyOf variant:numberanyOf variant:null model_numeric_value— required- Any of: (
number;null)Original extracted numeric value, before review overrides.
anyOf variant:numberanyOf variant:null timezone_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null timezone_offset— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null model_timezone_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null model_timezone_offset— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null categories— requiredarray· items: CategoryReferencemodel_categories— requiredarray· items: CategoryReferenceOriginal model category set, before review overrides.
extracted_at— requiredstring· format:date-time
AttributeReview
object
numeric_value— required- Any of: (
number;null)anyOf variant:numberanyOf variant:null category_ids— required- Any of: (
array· items:string;null)anyOf variant:array· items:stringItem schema:stringanyOf variant:null timezone_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null timezone_offset— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null timezone_name_set— requiredbooleantimezone_offset_set— requiredboolean
AttributeSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringattribute_type— requiredstringis_active— requiredbooleandeleted_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null order— requiredintegershow_seconds— requiredbooleanallow_new_categories— requiredbooleanallow_no_options_match— requiredbooleanallow_multiple_categories— requiredbooleanmax_selected_categories— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null run_after_evaluation— requiredbooleancontext_lookback_mode— requiredstringcontext_lookback_minutes— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null
Category
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null attribute_id— requiredstringname— requiredstringdescription— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null status— requiredstringis_active— requiredbooleanis_no_options_match— requiredbooleandeleted_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null
CategoryReference
object
id— requiredstringname— requiredstringstatus— requiredstringis_no_options_match— requiredbooleandeleted_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null
ConversationDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringsource_id— requiredstringExternal provider ID. Included in the resource's read permission.
state— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null loaded_from— required- Any of: (
string· format:date-time;null)Beginning of the saved conversation coverage window.
anyOf variant:string· format:date-timeanyOf variant:null loaded_to— required- Any of: (
string· format:date-time;null)End of the saved conversation coverage window.
anyOf variant:string· format:date-timeanyOf variant:null reporting_date— required- Any of: (
string· format:date;null)Reporting date in the project's timezone, based on the last in-window message or the coverage window end.
anyOf variant:string· format:dateanyOf variant:null reporting_timezone— requiredstringProject timezone used to interpret reporting dates.
attributed_manager_ids— requiredarray· items:stringItem schema:stringchat_tags— requiredarray· items:stringCurrent source-chat tags; separate from evaluation_tag_ids. Empty if unavailable.
Item schema:stringapp_url— requiredstringLink to Qualiteam. Opening it requires a signed-in user with access to this project.
evaluation_ids— optional- Any of: (
array· items:string;null)anyOf variant:array· items:stringItem schema:stringanyOf variant:null alert_ids— optional- Any of: (
array· items:string;null)anyOf variant:array· items:stringItem schema:stringanyOf variant:null evaluation_tag_ids— optional- Any of: (
array· items:string;null)anyOf variant:array· items:stringItem schema:stringanyOf variant:null
ConversationSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringsource_id— requiredstringExternal provider ID. Included in the resource's read permission.
state— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null loaded_from— required- Any of: (
string· format:date-time;null)Beginning of the saved conversation coverage window.
anyOf variant:string· format:date-timeanyOf variant:null loaded_to— required- Any of: (
string· format:date-time;null)End of the saved conversation coverage window.
anyOf variant:string· format:date-timeanyOf variant:null reporting_date— required- Any of: (
string· format:date;null)Reporting date in the project's timezone, based on the last in-window message or the coverage window end.
anyOf variant:string· format:dateanyOf variant:null reporting_timezone— requiredstringProject timezone used to interpret reporting dates.
attributed_manager_ids— requiredarray· items:stringItem schema:stringchat_tags— requiredarray· items:stringCurrent source-chat tags; separate from evaluation_tag_ids. Empty if unavailable.
Item schema:stringapp_url— requiredstringLink to Qualiteam. Opening it requires a signed-in user with access to this project.
CriterionDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringmax_value— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null minimum_value— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null is_active— requiredbooleanorder— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null context_lookback_mode— requiredstringcontext_lookback_minutes— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null instruction— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
CriterionResult
object
id— requiredstringcriterion_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null criterion_key— requiredstringcriterion_name_snapshot— requiredstringcriterion_order_snapshot— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null score— requiredintegermodel_score— requiredintegerOriginal immutable model score, before review overrides.
min_score— requiredintegermax_score— requiredintegerexplanation— requiredstringmessage_references— required- Any of: (
object;null)anyOf variant:objectAdditional properties:stringanyOf variant:null
CriterionReview
object
score_override— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null comment— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
CriterionSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringmax_value— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null minimum_value— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null is_active— requiredbooleanorder— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null context_lookback_mode— requiredstringcontext_lookback_minutes— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null
EvaluationDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringconversation_id— requiredstringtopic— requiredstringresult_status— requiredstringcriteria_scoring_mode— requiredstringaddition_score_direction— requiredstringCurrent project display setting. Changes score colors, never stored values.
total_score— requiredintegertotal_min_score— requiredintegertotal_max_score— requiredintegerevaluated_at— requiredstring· format:date-timeWhen this evaluation was produced; distinct from publication and conversation coverage.
attributed_manager_ids— requiredarray· items:stringItem schema:stringpublished_to_agents— requiredbooleanpublished_at— required- Any of: (
string· format:date-time;null)When this evaluation was published to agents.
anyOf variant:string· format:date-timeanyOf variant:null approved— requiredbooleanreviewed_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null approved_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null app_url— requiredstringLink to Qualiteam. Opening it requires a signed-in user with access to this project.
llm_general_comment— requiredstringoriginal_llm_general_comment— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null criteria_results— requiredarray· items: CriterionResultpublished_by— required- Any of: (Actor;
null)anyOf variant:null reviewed_by— required- Any of: (Actor;
null)anyOf variant:null approved_by— required- Any of: (Actor;
null)anyOf variant:null review_id— required- Any of: (
string;null)Linked review ID, if ownership of the evaluation card is known.
anyOf variant:stringanyOf variant:null
EvaluationSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringconversation_id— requiredstringtopic— requiredstringresult_status— requiredstringcriteria_scoring_mode— requiredstringaddition_score_direction— requiredstringCurrent project display setting. Changes score colors, never stored values.
total_score— requiredintegertotal_min_score— requiredintegertotal_max_score— requiredintegerevaluated_at— requiredstring· format:date-timeWhen this evaluation was produced; distinct from publication and conversation coverage.
attributed_manager_ids— requiredarray· items:stringItem schema:stringpublished_to_agents— requiredbooleanpublished_at— required- Any of: (
string· format:date-time;null)When this evaluation was published to agents.
anyOf variant:string· format:date-timeanyOf variant:null approved— requiredbooleanreviewed_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null approved_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null app_url— requiredstringLink to Qualiteam. Opening it requires a signed-in user with access to this project.
EvaluationTag
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringis_active— requiredbooleanvisible_to_agents— requiredbooleanassignable_by_agents— requiredbooleanassignable_by_qc_managers— requiredbooleanorder— requiredintegerdeleted_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null
FlowDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringdescription— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null is_active— requiredbooleansteps— requiredarray· items: FlowStep
FlowStep
object
name— requiredstringinstruction— requiredstringstep_type— requiredstringorder— requiredintegerclasses— required- Any of: (
array· items:string;null)anyOf variant:array· items:stringItem schema:stringanyOf variant:null parent_node— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
FlowSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringdescription— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null is_active— requiredboolean
KnowledgeDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringextracted_text— requiredstring
KnowledgeSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstring
ManagerDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringsource_id— requiredstringExternal provider ID. Included in the resource's read permission.
source_type— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null is_evaluated— requiredbooleantags— requiredarray· items:stringItem schema:stringemail— optional- Any of: (
string;null)Null unless contacts.read is granted and an email is stored.
anyOf variant:stringanyOf variant:null evaluation_instruction— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null evaluation_language— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
ManagerSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringsource_id— requiredstringExternal provider ID. Included in the resource's read permission.
source_type— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null is_evaluated— requiredbooleantags— requiredarray· items:stringItem schema:stringemail— optional- Any of: (
string;null)Null unless contacts.read is granted and an email is stored.
anyOf variant:stringanyOf variant:null
MessageSummary
object
id— requiredstringconversation_id— requiredstringsource_id— requiredstringExternal provider ID. Included in the resource's read permission.
author_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null author_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null author_type— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null manager_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null content— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null is_internal_note— requiredbooleanWhether this is a staff-only note in the source system.
created_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null in_evaluation_window— requiredbooleanWhether this message's timestamp belongs to the conversation's evaluation window.
is_reply— requiredbooleanreply— required- Any of: (ReplyContext;
null)Stored quoted-message context. It is not an additional message or evaluation activity.
anyOf variant:null is_forwarded— requiredbooleanforwarded_from_author_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
NotificationAlert
object
id— requiredstringname— requiredstring
NotificationCondition
object
min_severity— optional- Any of: (
string;null)anyOf variant:stringanyOf variant:null alert_ids— optional- Any of: (
array· items:string;null)anyOf variant:array· items:stringItem schema:stringanyOf variant:null
NotificationConversation
object
conversation_id— requiredstringtopic— requiredstringchat_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null manager_names— requiredarray· items:stringItem schema:stringalerts— requiredarray· items: NotificationAlert
NotificationConversationRef
object
conversation_id— requiredstringmanager_ids— requiredarray· items:stringSaved attribution from permitted cards; references managers[].id, not alert responsibility.
Item schema:stringchat_tags— requiredarray· items:stringSource-chat tags saved at creation and subject to recipient access. Empty when absent, hidden or not captured.
Item schema:string
NotificationDetail
object
id— requiredstringproject_id— requiredstringevent_type— required- NotificationEventType
created_at— requiredstring· format:date-timerecipient— required- NotificationRecipientIdentity
managers— requiredarray· items: NotificationManagertitle— requiredstringconversations— requiredarray· items: NotificationConversationRefAll related conversations, for every event type. Event-specific details remain in data.
text— requiredstringlinks— requiredarray· items: NotificationLinkdata— required- Exactly one of: (AlertNotificationData-Output; AppealCreatedNotificationData; AppealResolvedNotificationData; PublishedNotificationData)
Discriminator:
typeagent_conversations_published: PublishedNotificationDataalert_fired: AlertNotificationData-Outputappeal_created: AppealCreatedNotificationDataappeal_resolved: AppealResolvedNotificationData
NotificationEventType
string
enum: ["alert_fired","appeal_created","appeal_resolved","agent_conversations_published"]
NotificationFeedPage
object
data— requiredarray· items: NotificationDetailnext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null resume_cursor— requiredstring
NotificationLink
object
label— requiredstringurl— requiredstring
NotificationManager
object
id— requiredstringname— required- Any of: (
string;null)Current agent display name at read time; unlike tags, this field is not a creation-time snapshot.
anyOf variant:stringanyOf variant:null tags— requiredarray· items:stringAgent tags saved when this notification was created. Empty for older snapshots.
Item schema:string
NotificationRecipient
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringsource_user_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null email— optional- Any of: (
string;null)Null unless contacts.read is granted and an email is stored.
anyOf variant:stringanyOf variant:null telegram_handle— optional- Any of: (
string;null)Null unless contacts.read is granted and a handle is stored. A handle does not verify the current owner or a delivery destination.
anyOf variant:stringanyOf variant:null
NotificationRecipientIdentity
object
id— requiredstringkind— requiredstringenum:
["recipient","agent"]name— requiredstringuser_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null email— required- Any of: (
string;null)Null unless contacts.read is granted and an email is stored.
anyOf variant:stringanyOf variant:null telegram_handle— required- Any of: (
string;null)Null unless contacts.read is granted and a handle is stored. A handle does not verify the current owner or a delivery destination.
anyOf variant:stringanyOf variant:null
NotificationRule
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringevent_type— requiredstringall_managers— requiredbooleanmanager_ids— requiredarray· items:stringItem schema:stringrecipient_ids— requiredarray· items:stringItem schema:stringcondition— required- Any of: (NotificationCondition;
null)anyOf variant:null
Page_AlertDefinition_
object
data— requiredarray· items: AlertDefinitionnext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_AlertSummary_
object
data— requiredarray· items: AlertSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_AppealSummary_
object
data— requiredarray· items: AppealSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_AttributeResultSummary_
object
data— requiredarray· items: AttributeResultSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_AttributeSummary_
object
data— requiredarray· items: AttributeSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_ConversationSummary_
object
data— requiredarray· items: ConversationSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_CriterionSummary_
object
data— requiredarray· items: CriterionSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_EvaluationSummary_
object
data— requiredarray· items: EvaluationSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_EvaluationTag_
object
data— requiredarray· items: EvaluationTagnext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_FlowSummary_
object
data— requiredarray· items: FlowSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_KnowledgeSummary_
object
data— requiredarray· items: KnowledgeSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_ManagerSummary_
object
data— requiredarray· items: ManagerSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_MessageSummary_
object
data— requiredarray· items: MessageSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_NotificationRecipient_
object
data— requiredarray· items: NotificationRecipientnext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_NotificationRule_
object
data— requiredarray· items: NotificationRulenext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_ProjectSummary_
object
data— requiredarray· items: ProjectSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_ReviewSummary_
object
data— requiredarray· items: ReviewSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
Page_RuleSummary_
object
data— requiredarray· items: RuleSummarynext_cursor— required- Any of: (
string;null)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.
anyOf variant:stringanyOf variant:null
ProjectDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null name— requiredstringslug— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null reporting_timezone— requiredstringProject timezone used to interpret reporting dates.
criteria_scoring_mode— requiredstringaddition_score_direction— requiredstringCurrent project display setting. Changes score colors, never stored values.
subtraction_min_score— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null subtraction_max_score— requiredintegerlanguage— requiredstringapp_url— requiredstringLink to Qualiteam. Opening it requires a signed-in user with access to this project.
description— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null per_agent_evaluation_enabled— requiredboolean
ProjectSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null name— requiredstringslug— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null reporting_timezone— requiredstringProject timezone used to interpret reporting dates.
criteria_scoring_mode— requiredstringaddition_score_direction— requiredstringCurrent project display setting. Changes score colors, never stored values.
subtraction_min_score— required- Any of: (
integer;null)anyOf variant:integeranyOf variant:null subtraction_max_score— requiredintegerlanguage— requiredstringapp_url— requiredstringLink to Qualiteam. Opening it requires a signed-in user with access to this project.
PublishedNotificationData
object
type— requiredstringconst:
agent_conversations_publishedagent_name— requiredstringconversation_count— requiredintegerconversation_ids— requiredarray· items:stringItem schema:stringevaluation_ids— requiredarray· items:stringItem schema:string
ReplyContext
object
author_name— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null author_type— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null content— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null
ReviewDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null conversation_id— requiredstringevaluation_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null approved— requiredbooleanreviewed_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null approved_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null reviewed_by— required- Any of: (Actor;
null)anyOf variant:null approved_by— required- Any of: (Actor;
null)anyOf variant:null general_comment— requiredstringcriteria_reviews— requiredobjectAdditional properties: CriterionReviewattribute_reviews— requiredobjectAdditional properties: AttributeReview
ReviewSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null conversation_id— requiredstringevaluation_id— required- Any of: (
string;null)anyOf variant:stringanyOf variant:null approved— requiredbooleanreviewed_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null approved_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null reviewed_by— required- Any of: (Actor;
null)anyOf variant:null approved_by— required- Any of: (Actor;
null)anyOf variant:null
RuleDetail
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringis_active— requiredbooleanorder— requiredintegertargets— requiredarray· items:stringItem schema:stringinstruction— requiredstring
RuleSummary
object
id— requiredstringcreated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null updated_at— required- Any of: (
string· format:date-time;null)anyOf variant:string· format:date-timeanyOf variant:null project_id— requiredstringname— requiredstringis_active— requiredbooleanorder— requiredintegertargets— requiredarray· items:stringItem schema:string
NotificationSummary
object
id— requiredstringproject_id— requiredstringevent_type— required- NotificationEventType
created_at— requiredstring· format:date-timerecipient— required- NotificationRecipientIdentity
managers— requiredarray· items: NotificationManagertitle— requiredstring